zoukankan      html  css  js  c++  java
  • 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));
            }
        }
  • 相关阅读:
    第一个springboot程序,初识springboot
    创建一个简单的springBoot项目的两种方式
    vue过程中遇到的Uncaught (in promise) TypeError: Cannot read property '$message' of undefined
    springboot redis的db动态切换没有作用
    docker redis chown: changing ownership of '.': Permission denied
    axios url携带参数问题(params与data的区别)
    docker安装mysql8.0并挂载到主机
    android与服务器的登录验证与安全设计
    团队冲刺10 5.11
    构建之法01
  • 原文地址:https://www.cnblogs.com/CSSZBB/p/15214791.html
Copyright © 2011-2022 走看看