Grid move

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using System.Windows;
 7 using System.Windows.Controls;
 8 using System.Windows.Data;
 9 using System.Windows.Documents;
10 using System.Windows.Input;
11 using System.Windows.Media;
12 using System.Windows.Media.Imaging;
13 using System.Windows.Navigation;
14 using System.Windows.Shapes;
15 
16 namespace WpfApplication1
17 {
18     /// <summary>
19     /// MainWindow.xaml 的交互逻辑
20     /// </summary>
21     public partial class MainWindow : Window
22     {
23         public MainWindow()
24         {
25             InitializeComponent();
26             Binding binding = new Binding();
27             binding.Source = main_grid;
28             binding.Path = new PropertyPath("Margin");
29             binding.Mode = BindingMode.TwoWay;
30             binding.Converter = new MarginConverter();
31             binding.ConverterParameter = main_grid.Width;
32             sub_grid.SetBinding(Grid.MarginProperty, binding);
33         }
34 
35         public class MarginConverter : IValueConverter
36         {
37 
38             public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
39             {
40                 Thickness margin = (Thickness)value;
41                 double width = (double)parameter;
42                 return new Thickness(margin.Left + width, margin.Top -30, 0, 0);
43             }
44 
45             public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
46             {
47                 Thickness margin = (Thickness)value;
48                 double width = (double)parameter;
49                 return new Thickness(margin.Left - width, margin.Top + 30, 0, 0);
50             }
51         }
52 
53         //选中控件的鼠标位置偏移量
54         Point targetPoint;
55 
56         private void canvas_MouseDown(object sender, MouseButtonEventArgs e)
57         {
58             var targetElement = e.Source as IInputElement;
59             if (targetElement != null)
60             {
61                 targetPoint = e.GetPosition(targetElement);
62                 //开始捕获鼠标
63                 targetElement.CaptureMouse();
64             }
65         }
66 
67         private void canvas_MouseUp(object sender, MouseButtonEventArgs e)
68         {
69             //取消捕获鼠标
70             Mouse.Capture(null);
71         }
72 
73         private void canvas_MouseMove(object sender, MouseEventArgs e)
74         {
75             //确定鼠标左键处于按下状态并且有元素被选中
76             var targetElement = Mouse.Captured as Grid;
77             if (e.LeftButton == MouseButtonState.Pressed && targetElement != null)
78             {
79                 var pCanvas = e.GetPosition(canvas);
80                 //设置最终位置
81                 targetElement.Margin = new Thickness(pCanvas.X - targetPoint.X, pCanvas.Y - targetPoint.Y, 0, 0);
82             }
83         }
84     }
85 }
 1 <Window x:Class="WpfApplication1.MainWindow"
 2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
 5         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 6         xmlns:local="clr-namespace:WpfApplication1"
 7         mc:Ignorable="d"
 8         Title="MainWindow" Height="350" Width="525">
 9     <Canvas>
10         <Viewbox Stretch="Fill">
11             <Grid x:Name="canvas" Height="350" Width="525">
12                 <Grid x:Name="main_grid" Height="50" Width="80" Background="Yellow" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="100,100,0,0" PreviewMouseMove="canvas_MouseMove" PreviewMouseLeftButtonDown="canvas_MouseDown" PreviewMouseLeftButtonUp="canvas_MouseUp">
13                     <Border BorderBrush="Black" BorderThickness="1" ></Border>
14                 </Grid>
15                 <Grid x:Name="sub_grid" Height="30" Width="30" Background="LightBlue" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="180,70,0,0" PreviewMouseMove="canvas_MouseMove" PreviewMouseLeftButtonDown="canvas_MouseDown" PreviewMouseLeftButtonUp="canvas_MouseUp">
16                     <Border BorderBrush="Black" BorderThickness="1"></Border>
17                 </Grid>
18             </Grid>
19         </Viewbox>
20     </Canvas>
21 </Window>

 

posted @ 2017-02-19 21:33  keyiei  阅读(235)  评论(0编辑  收藏  举报