首页 > 其他分享 >B站朝夕教育 【.NET9.0+WPF实战三类流程化业务逻辑控制】学习记录 【二】

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

时间:2024-12-04 09:45:50浏览次数:7  
标签:sender 流程化 节点 WPF public NET9.0

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

第6课 使用ViewModel绑定的方式实现拖拽

创建MainViewModel.cs文件

 1     public class MainViewModel
 2     {
 3         public ObservableCollection<string> ProcessList { get; set; } = new ObservableCollection<string>();
 4 
 5         public void ListViewItem_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
 6         {
 7             DragDrop.DoDragDrop((DependencyObject)sender, (sender as ListViewItem).Content, DragDropEffects.Copy);
 8         }
 9 
10         public void ListBox_Drop(object sender, DragEventArgs e)
11         {
12             string value = e.Data.GetData(typeof(string)).ToString();
13             (sender as ListBox).Items.Add(new ListBoxItem() { Content = value });
14         }
15     }

 

Nuget搜索behaviors安装Microsoft.Xaml.Behaviors.Wpf  版本1.1.135

MainView.xaml文件修改Window节点增加属性:

  xmlns:i="http://schemas.microsoft.com/xaml/behaviors"

然后就可以修改节点ListView下面的ListViewItem增加子节点:

1  <i:Interaction.Triggers>
2      <i:EventTrigger EventName="PreviewMouseLeftButtonDown">
3          <i:CallMethodAction MethodName="ListViewItem_MouseLeftButtonDown" TargetObject="{Binding}" />
4      </i:EventTrigger>
5  </i:Interaction.Triggers>

然后修改ListBox节点下面新增子节点

            <i:Interaction.Triggers>
                <i:EventTrigger EventName="Drop">
                    <i:CallMethodAction MethodName="ListBox_Drop" TargetObject="{Binding}" />
                </i:EventTrigger>
            </i:Interaction.Triggers>

最终MainView.xaml文件中代码如下:

 1 <Window x:Class="WpfApp1.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:WpfApp1" 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.ColumnDefinitions>
13             <ColumnDefinition Width="200" />
14             <ColumnDefinition Width="300" />
15             <ColumnDefinition />           
16         </Grid.ColumnDefinitions>
17         <ListView>
18             <ListViewItem Content="AAA">
19                 <i:Interaction.Triggers>
20                     <i:EventTrigger EventName="PreviewMouseLeftButtonDown">
21                         <i:CallMethodAction MethodName="ListViewItem_MouseLeftButtonDown" TargetObject="{Binding}" />
22                     </i:EventTrigger>
23                 </i:Interaction.Triggers>
24             </ListViewItem>
25             <ListViewItem Content="BBB"></ListViewItem>
26             <ListViewItem Content="CCC"></ListViewItem>
27             <ListViewItem Content="DDD"></ListViewItem>
28         </ListView>
29         <ListBox Grid.Column="1" AllowDrop="True" ItemsSource="{Binding ProcessList}">
30             <i:Interaction.Triggers>
31                 <i:EventTrigger EventName="Drop">
32                     <i:CallMethodAction MethodName="ListBox_Drop" TargetObject="{Binding}" />
33                 </i:EventTrigger>
34             </i:Interaction.Triggers>
35         </ListBox>
36     </Grid>
37 </Window>

运行测试拖拽功能基本上还可以操作,最终松开鼠标时会有报错

标签:sender,流程化,节点,WPF,public,NET9.0
From: https://www.cnblogs.com/uxinxin/p/18585564

相关文章

  • 使用 Hosting 构建 WPF 程序 - prism 篇
    在使用Hosting构建WPF程序-Stylet篇中,使用Hosting+Stylet的方式,构建了一个WPF框架,本文用于记录使用.NETGenericHost+Prism构建WPF所需的修改,仅供参考。示例代码:Jasongrass/Demo.AppHostPrism:WPF+Prism+Hosting......
  • iNKORE.UI.WPF.Modern试用笔记
    源码地址:https://github.com/iNKORE-Public/UI.WPF.Modern官方文档:https://docs.inkore.net/en-us/ui-wpf-modern/onboarding/目前官方的文档不是很齐全,貌似有不少的控件的内容还是空的,还在补充中。开发库本身同时支持.NETFRAMEWORK和.NETCORE。但.NETCORE版本估计用到了特......
  • WPF笔记8——与MVVM有关的文件夹
    WPF项目使用MVVM时,要在项目中创建对应的文件夹:Command、Model、Service、View、ViewModel,如下图:(1)View文件夹:用来存放窗口、usercontrol;(2)ViewModel文件夹:存放ViewModel类(View类需要绑定的属性、命令都定义在对应的ViewModel类中)//ObjectPropertyNotified是ViewModel类的基类......
  • WPF中嵌入第三方窗体-WindowsFormsHost使用
    嵌入第三方窗体到Windows窗体或控件中,通过调用API方法很容易实现,但是在WPF存在一些问题,这里对解决这些问题的方法做一点笔记:首先说一下要做嵌入第三方窗体要用到的API方法[DllImport("user32.dll",SetlastError=true)]privatestaticexternIntPtrSetParent(IntPtrhWndC......
  • WPF+MVVM案例实战与特效(三十一)- 封装一个加载动画的自定义控件
    文章目录1、案例效果2、案例实现1、资源与文件创建2、自定义控件封装3、自定义控件使用4、总结1、案例效果2、案例实现在开发WPF应用程序时,我们常常需要一个灵活的加载动画控件,该控件可以根据窗口的大小自动调整其内部元素(如图片、边框和文本)的尺寸,并......
  • wpf 标尺 刻度尺 适用于图像缩放
    xaml部分主要代码:<Canvasx:Name="cvRuler"Margin="0"Background="WhiteSmoke"TextBlock.Foreground="Black"/>后台主要代码1//画标尺2privatevoidDrawRule()3{45if(cvRuler.......
  • WPF中的TypeConverter类型
    自定义对象如下:点击查看代码publicclassHuman{publicstringName{get;set;}publicHumanChild{get;set;}}需求1:点击界面上Button时弹出Human对象的Name信息代码实现:点击查看代码<Windowx:Class="HappyWPF.MainWindow"......
  • 界面控件DevExpress WPF v24.2新功能预览 - 人工智能(AI)集成
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。无论是Office办公软件的衍伸产品,还是以数据为中心......
  • 使用XWPFTemplate进行java后端word模版导出
    1.pom引入poi-tl<dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.7.3</version></dependency> 2.word模版 3.业务代码......
  • WPF 桌面应用开发进阶:用户界面设计与交互逻辑的完美融合
    WindowsPresentationFoundation(WPF)是Microsoft推出的一个桌面应用开发框架,旨在提供一个高效、可扩展的用户界面设计工具。WPF支持数据绑定、模板化、响应式布局等先进的特性,能够帮助开发者快速构建现代化的桌面应用程序。本文将围绕WPF开发中的界面设计与交互逻辑,详细......