B站朝夕教育 【.NET9.0+WPF实战三类流程化业务逻辑控制】学习记录 【七】

news/2024/12/4 15:46:13/文章来源:https://www.cnblogs.com/uxinxin/p/18586481

播放地址:20241120-.NET9.0+WPF实战三类流程化业务逻辑控制-10_哔哩哔哩_bilibili

第16-19节 调整代码让拖拽到控制流程图里的模块可以再次拖拽移动

MainView.xaml文件

主要调整ItemsControl中的节点增加几个事件,这里注意 TargetObject="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=DataContext}"需要详细绑定内容

  1 <Window x:Class="WpfApp2.MainView"
  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:WpfApp2" xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
  7         mc:Ignorable="d"
  8         WindowStartupLocation="CenterScreen"
  9         Background="White"
 10         Title="MainView" Height="650" Width="1300">
 11     <Grid>
 12         <Grid.RowDefinitions>
 13             <RowDefinition Height="Auto" />
 14             <RowDefinition />
 15         </Grid.RowDefinitions>
 16         <Grid.ColumnDefinitions>
 17             <ColumnDefinition Width="200" />
 18             <ColumnDefinition Width="300" />
 19             <ColumnDefinition />           
 20         </Grid.ColumnDefinitions>
 21         <Button Content="执行" HorizontalAlignment="Stretch" Margin="3"  Command="{Binding ExecuteCommand}" />
 22         <TextBlock Text="循序流程" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>
 23         <TextBlock Text="流程图控制" Grid.Column="2" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>
 24         <ListView Grid.Row="1" Grid.Column="0">
 25             <ListViewItem Content="AAA" Tag="ProcessA">
 26                 <i:Interaction.Triggers>
 27                     <i:EventTrigger EventName="PreviewMouseLeftButtonDown">
 28                         <i:CallMethodAction MethodName="ListViewItem_MouseLeftButtonDown" TargetObject="{Binding}" />
 29                     </i:EventTrigger>
 30                 </i:Interaction.Triggers>
 31             </ListViewItem>
 32             <ListViewItem Content="BBB" Tag="ProcessB">
 33                 <i:Interaction.Triggers>
 34                     <i:EventTrigger EventName="PreviewMouseLeftButtonDown">
 35                         <i:CallMethodAction MethodName="ListViewItem_MouseLeftButtonDown" TargetObject="{Binding}" />
 36                     </i:EventTrigger>
 37                 </i:Interaction.Triggers></ListViewItem>
 38             <ListViewItem Content="CCC" Tag="ProcessC">
 39                 <i:Interaction.Triggers>
 40                     <i:EventTrigger EventName="PreviewMouseLeftButtonDown">
 41                         <i:CallMethodAction MethodName="ListViewItem_MouseLeftButtonDown" TargetObject="{Binding}" />
 42                     </i:EventTrigger>
 43                 </i:Interaction.Triggers></ListViewItem>
 44             <ListViewItem Content="DDD" Tag="ProcessD">
 45                 <i:Interaction.Triggers>
 46                     <i:EventTrigger EventName="PreviewMouseLeftButtonDown">
 47                         <i:CallMethodAction MethodName="ListViewItem_MouseLeftButtonDown" TargetObject="{Binding}" />
 48                     </i:EventTrigger>
 49                 </i:Interaction.Triggers></ListViewItem>
 50         </ListView>
 51         <ListBox Grid.Row="1" Grid.Column="1" AllowDrop="True" ItemsSource="{Binding ProcessList}">
 52             <i:Interaction.Triggers>
 53                 <i:EventTrigger EventName="Drop">
 54                     <i:CallMethodAction MethodName="ListBox_Drop" TargetObject="{Binding}" />
 55                 </i:EventTrigger>
 56             </i:Interaction.Triggers>
 57             <ListBox.ItemTemplate>
 58                 <DataTemplate>
 59                     <TextBlock Text="{Binding Name}">
 60                     </TextBlock>
 61                 </DataTemplate>
 62             </ListBox.ItemTemplate>
 63         </ListBox>
 64         <ItemsControl Grid.Row="1" Grid.Column="2" Background="Transparent" AllowDrop="true" ItemsSource="{Binding ProcessList}">
 65             <i:Interaction.Triggers>
 66                 <i:EventTrigger EventName="Drop">
 67                     <i:CallMethodAction MethodName="ListBox_Drop" TargetObject="{Binding}" />
 68                 </i:EventTrigger>
 69             </i:Interaction.Triggers>
 70             <ItemsControl.ItemsPanel>
 71                 <ItemsPanelTemplate>
 72                     <Canvas Background="AliceBlue" />
 73                 </ItemsPanelTemplate>
 74             </ItemsControl.ItemsPanel>
 75             <ItemsControl.ItemContainerStyle>
 76                 <Style TargetType="ContentPresenter">
 77                     <Setter Property="Canvas.Left" Value="{Binding X}"/>
 78                     <Setter Property="Canvas.Top" Value="{Binding Y}"/>
 79                 </Style>
 80             </ItemsControl.ItemContainerStyle>
 81 
 82             <ItemsControl.ItemTemplate>
 83                 <DataTemplate>
 84                     <Grid>
 85                         <Border Width="120" Height="30" Background="White" CornerRadius="5" Name="border">
 86                             <Border.Effect>
 87                                 <DropShadowEffect Color="Gray" ShadowDepth="0" BlurRadius="5" Opacity="0.2" />
 88                             </Border.Effect>
 89                             <i:Interaction.Triggers>
 90                                 <i:EventTrigger EventName="MouseLeftButtonDown">
 91                                     <i:CallMethodAction MethodName="Node_MouseLeftButtonDown" TargetObject="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=DataContext}" />
 92                                 </i:EventTrigger>
 93                                 <i:EventTrigger EventName="MouseLeftButtonUp">
 94                                     <i:CallMethodAction MethodName="Node_MouseLeftButtonUp" TargetObject="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=DataContext}" />
 95                                 </i:EventTrigger>
 96                                 <i:EventTrigger EventName="MouseMove">
 97                                     <i:CallMethodAction MethodName="Node_MouseMove" TargetObject="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=DataContext}" />
 98                                 </i:EventTrigger>
 99                             </i:Interaction.Triggers>
100                             <TextBlock Text="{Binding Name}" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>
101                         </Border>
102                     </Grid>
103                 </DataTemplate>
104             </ItemsControl.ItemTemplate>
105         </ItemsControl>
106     </Grid>
107 </Window>

MainViewModel.cs文件增加绑定的事件

 1  public partial class MainViewModel
 2  {
 3      public ObservableCollection<NodeModel> ProcessList { get; set; } = new ObservableCollection<NodeModel>();
 4 
 5      public void ListViewItem_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
 6      {
 7          DragDrop.DoDragDrop((DependencyObject)sender, (sender as ListViewItem).Tag, DragDropEffects.Copy);
 8      }
 9 
10      public void ListBox_Drop(object sender, DragEventArgs e)
11      {
12          string tag = e.Data.GetData(typeof(string)).ToString();
13          var point = e.GetPosition((IInputElement)sender);
14          //反射
15          //根据字符串获取类型
16          Type type = Assembly.GetEntryAssembly().GetType("WpfApp2." + tag);
17          //根据类型创建实例
18          NodeModel instance = (NodeModel)Activator.CreateInstance(type);
19          instance.X=point.X-60;
20          instance.Y=point.Y-15;
21          ProcessList.Add(instance);
22      }
23      bool is_moving = false;
24      Point old_point = new Point();
25      public void Node_MouseLeftButtonDown(object  obj, MouseButtonEventArgs e)
26      {
27          is_moving = true;
28          old_point = e.GetPosition((IInputElement)obj);
29          Mouse.Capture((IInputElement)obj);
30      }
31      public void Node_MouseLeftButtonUp(object obj, MouseButtonEventArgs e)
32      {
33          is_moving = false;
34          Mouse.Capture(null);
35      }
36      public void Node_MouseMove(object sender, MouseEventArgs e)
37      {
38          if (is_moving)
39          {
40              var new_point = e.GetPosition((IInputElement)sender);
41              var node_model=(sender as FrameworkElement).DataContext as NodeModel;
42              node_model.X += new_point.X- old_point.X;
43              node_model.Y+= new_point.Y - old_point.Y;
44          }
45      }
46 
47      [RelayCommand]
48      private void Execute()
49      {
50          foreach (var item in ProcessList)
51          {
52              item.Execute();
53          }
54      }
55  }

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/846700.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

威联通-002 Docker镜像下载

@目录前言操作大纲1.登录阿里云镜像服务2.创建个人容器3.GitHub复制代码到本地库、配置信息4.点击修改自己想要拉取的镜像5.进入阿里云查看6.创建容器参考(可用)前言 由于国内几乎所有的docker库的封锁,现在不能进行docker镜像的拉取操作,尝试很多种方法都失败了,最后总结…

Mysql 一主一从配置

Mysql 一主一从配置 环境信息ip地址 主机信息 角色 mysql版本192.168.1.19 S600 主 8.0.40-0ubuntu0.20.04.1192.168.1.20 H840 从 8.0.40-0ubuntu0.20.04.1本环境已完成2台Mysql单机安装,Mysql单机安装操作文档 具体操作 Mysql主机配置 配置文件修改修改配置Master配置/etc/m…

Mycat2+Mysql一主一从实现读写分离配置

Mycat2+Mysql一主一从实现读写分离配置 前置配置Mysql一主一从搭建 Mycat2环境搭建环境信息ip地址 软件 角色 版本192.168.1.19 Mysql 主 8.0.40-0ubuntu0.20.04.1192.168.1.19 Mycat2 —— 1.21-release-3-14192.168.1.20 Mysql 从 8.0.40-0ubuntu0.20.04.1操作步骤 1. 修改并…

体验iOS手机群控免费苹果手机免越狱群控:银河中控全面解析

在多设备管理的需求日益增长的今天,能够高效地管理和控制多台iOS设备成为了一个重要的课题。对于不想或不能进行越狱操作的用户来说,找到一种安全、合法且高效的解决方案显得尤为重要。本章将深入探讨一款名为“银河中控”的免费苹果手机免越狱群控系统,帮助您了解其功能特性…

k8s~关于非常啰嗦的标签和选择器

总感觉k8s中定义的deplyment和service非常的啰嗦,尤其是在选择器的定义上,但没办法,它的设计总有它的道理。svc(spec.selector.app)deployment(metadata.labels.app,spec.selector.matchLabels.app)pods(metadata.labels.app)nginx的部署 下面是一个 Kubernetes YAML 文件示…

Windows11中安装SQL Server 2019

介绍 Microsoft SQL Server 是一种关系数据库管理系统 (RDBMS)。 应用程序和工具连接到 SQL Server 实例或数据库,并使用 Transact-SQL (T-SQL) 进行通信。 SQL Server Management Studio (SSMS) 是一种集成环境,用于管理任何 SQL 基础结构。 使用 SSMS 访问、配置、管理和开…

python项目安装虚拟环境

滴水成冰,世间不存在毫无意义的付出,时间终会给你答案。

边坡检测解决方案,根据实际需求来定制方案

大家好,我是星创易联的林工。今天跟大家聊一聊我们做边坡监测的那些事儿。 ​ (参考:key-iot.com.cn ) 说到边坡监测啊,最重要的就是安全。我们公司这些年一直在这个领域深耕,积累了不少经验。来,我给大家详细说说我们是怎么做的。 首先啊,我们要先摸清楚这个边坡的脾气。用我…

【科普系列】ICMPv6协议基础简介

引言在科普介绍文章《IPv6协议—互联网通信协议第六版》中介绍了IPv6协议,这次的科普主题是ICMPv6(Internet Control Message Protocol version 6),它作为IPv6网络中的核心协议之一,是网络通信中不可或缺的一部分。ICMPv6的设计继承了IPv4中ICMPv4协议的基本功能,然而,它…

ELK常用命令

# 查询 logstash ps -ef|grep logstash # elastic ps -ef|grep elastic # kibana ps -ef|grep kibana# 关闭服务,根据线程id进行kill kill -9 {#线程id}# 进入目录 cd /opt/elk7.17/ # 查看logstash日志 tail -f /opt/elk7.17/logstash/output.log tail -n 1000 logstash/…

三星硬盘维修数据恢复

常见原因: 误删除文件:用户在清理文件时不小心将重要文件误删。 硬盘格式化:用户格式化整个硬盘而忘记提前备份重要数据。 文件系统损坏:导致硬盘中的数据无法正常读取,通常表现为移动硬盘连接电脑后无法识别或提示格式化。 物理损坏:如硬盘摔落、进水、硬盘内部元件损坏…

哪些CRM系统在2024年赢得了国内市场?

在2024年,国内CRM市场呈现出新的发展趋势,其中智能化、体系化和平台化成为主流方向。随着企业数字化转型的加速和对客户关系管理的日益重视,CRM系统的重要性愈发凸显。 在这一背景下,纷享销客等业内领先的供应商依然处于市场前列,凭借其强大的功能和优质的服务赢得了广泛的…