wpf 實現控件拖拽(仿windows 桌面圖標拖拽)


一直覺得拖拖拽控件很有用,但卻一直沒用它做過東西,今天來實踐一下

實現的效果就參考桌面上的圖標拖放把

 

 

實現效果如下,主要用到  1VisualBrush 來仿制被拖控件的樣子,  2DragDrop相關類和函數的使用詳情看代碼把

 

 

    <Canvas Name="myGrid" AllowDrop="True"  Background="AliceBlue" Drop="myGrid_Drop" PreviewDragOver="myGrid_DragOver">
        <Button x:Name="btn" PreviewMouseLeftButtonDown="Button_MouseLeftButtonDown" AllowDrop="True" Height="39.127" Canvas.Left="37.422" Canvas.Top="30.084" Width="61.774">
            <Button.Background>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                    <GradientStop Color="#FFF7F5F5" Offset="0"/>
                    <GradientStop Color="#FF319744" Offset="1"/>
                </LinearGradientBrush>
            </Button.Background> hello
        </Button>
        <Rectangle x:Name="rt"></Rectangle>
    </Canvas>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        Point point;
        private void Button_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            VisualBrush vb = new VisualBrush(sender as Button);

            rt.Width = btn.ActualWidth;
            rt.Height = btn.ActualHeight;
            rt.Fill = vb;

            Canvas.SetLeft(rt, Canvas.GetLeft(btn));
            Canvas.SetTop(rt, Canvas.GetTop(btn));

            point = e.GetPosition(myGrid);
            rt.Visibility = Visibility.Visible;
            DragDrop.DoDragDrop(btn, btn, DragDropEffects.Move);

        }

        private void myGrid_DragOver(object sender, DragEventArgs e)
        {
            var newpoint = e.GetPosition(myGrid);
            var leftmove = newpoint.X - point.X;
            var topmove = newpoint.Y - point.Y;
            point = newpoint;
            Canvas.SetLeft(rt, Canvas.GetLeft(rt) + leftmove);
            Canvas.SetTop(rt, Canvas.GetTop(rt) + topmove);

        }

        private void myGrid_Drop(object sender, DragEventArgs e)
        {
            rt.Visibility = Visibility.Collapsed;
            Canvas.SetLeft(btn, Canvas.GetLeft(rt));
            Canvas.SetTop(btn, Canvas.GetTop(rt));
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM