当前位置:   article > 正文

WPF实现拖动控件功能(类似从工具箱拖出工具)

WPF实现拖动控件功能(类似从工具箱拖出工具)

一、背景

    下面代码只是简单示例,未使用MVVM模式编写

二、工具箱(ListBox)

    2.1 前端代码

  1. <!-- 工具箱 -->
  2. <ListBox Grid.Column="0" x:Name="Toolbox">
  3. <ListBoxItem>Tool 1</ListBoxItem>
  4. <ListBoxItem>Tool 2</ListBoxItem>
  5. <!-- 添加更多工具 -->
  6. </ListBox>

   2.2 前端事件

  1. <Window.Resources>
  2. <Style TargetType="ListBoxItem">
  3. <EventSetter Event="PreviewMouseMove" Handler="ListBoxItem_PreviewMouseMove"/>
  4. </Style>
  5. </Window.Resources>

    2.2 后端拖动代码

  1. private void ListBoxItem_PreviewMouseMove(object sender, MouseEventArgs e)
  2. {
  3. if(sender is ListBoxItem item)
  4. {
  5. DragDrop.DoDragDrop(item, item.Content, DragDropEffects.Copy);
  6. }
  7. }

三、工作页面(Canvas)

    3.1 前端代码

  1. <!-- 流程图容器 -->
  2. <Canvas Grid.Column="1" x:Name="FlowChartCanvas" Background="White" AllowDrop="True" PreviewDragOver="FlowChartCanvas_PreviewDragOver" PreviewDrop="FlowChartCanvas_PreviewDrop">
  3. <!-- 流程图元素 -->
  4. </Canvas>

    3.2 后端获取工具放置坐标

  1. private Point startPoint;
  2. private void FlowChartCanvas_PreviewDragOver(object sender, DragEventArgs e)
  3. {
  4. startPoint = e.GetPosition(FlowChartCanvas);
  5. }

    3.3 后端放置工具

  1. private void FlowChartCanvas_PreviewDrop(object sender, DragEventArgs e)
  2. {
  3. if (e.Data.GetDataPresent(DataFormats.StringFormat))
  4. {
  5. var tool = e.Data.GetData(DataFormats.StringFormat) as string;
  6. if (tool != null)
  7. {
  8. var element = new TextBlock
  9. {
  10. Text = tool,
  11. Background = Brushes.LightBlue,
  12. Width = 100,
  13. Height = 30
  14. };
  15. Canvas.SetLeft(element, startPoint.X);
  16. Canvas.SetTop(element, startPoint.Y);
  17. FlowChartCanvas.Children.Add(element);
  18. }
  19. }
  20. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/257984
推荐阅读
相关标签
  

闽ICP备14008679号