WPF中的拖放1
实现了WPF的不同层级间的元素之间的拖放,例子虽小却很经典,引申一下也许可以实现类VS界面的浮动依靠面板。
拖放前:
拖放后:
代码如下:
<Window x:Class="WpfApplication8.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <Canvas Margin="0,0,216,0" Name="canvas1" Background="Crimson" AllowDrop="True" Drop="C1Drop"> <Rectangle Height="100" Margin="10,10" Name="rectangle1" Width="100" Fill="Azure" PreviewMouseMove="RectMove" /> </Canvas> <Canvas HorizontalAlignment="Right" Margin="0,0,0,0" Name="canvas2" Width="199" Background="DarkSalmon" AllowDrop="True" Drop="C2Drop"/> </Grid> </Window>
private void C1Drop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(typeof(Rectangle))) { string str = ((Canvas)(this.rectangle1.Parent)).Name.ToString(); if(str.Equals("canvas2")) { Rectangle rect = (Rectangle)e.Data.GetData(typeof(Rectangle)); this.canvas2.Children.Remove(rect); this.canvas1.Children.Add(rect); } } } private void C2Drop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(typeof(Rectangle))) { string str = ((Canvas)(this.rectangle1.Parent)).Name.ToString(); if (str.Equals("canvas1")) { Rectangle rect = (Rectangle)e.Data.GetData(typeof(Rectangle)); this.canvas1.Children.Remove(rect); this.canvas2.Children.Add(rect); } } } private void RectMove(object sender, MouseEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) // 如果鼠标左键被按下 { DataObject data = new DataObject(typeof(Rectangle), this.rectangle1); DragDrop.DoDragDrop(this.rectangle1, data, DragDropEffects.Move); } }
感觉博主苏扬的分享:http://msdn.microsoft.com/zh-cn/ff685657.aspx
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步