![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
wpf
励志35岁去越南躺平的造砖核动黑马程序猿
这个作者很懒,什么都没留下…
展开
-
WPF中嵌入3D模型通用结构
背景:wpf本身有提供3D的绘制,但是自己通过代码描绘出3D是比较困难的。3D库helix-toolkit支持调用第三方生成的模型,比如Blender这些,所以在wpf上使用3D就变得非常简单。引入helix-toolkit命名空间:xmlns:ht="http://helix-toolkit.org/wpf"--方法Viewport_MouseDown中判断有没有点击中了我们自己导入的模型。3、Code_behind设置点开页面就选择3d模型。2、xaml界面中设置相机和光源等参数。原创 2024-04-06 22:51:15 · 1038 阅读 · 0 评论 -
用户控件窗口如何实现居中弹出呢
用户控件是没有WindowStartupLocation属性可以设置的,这个是窗体才能这样设置;那么弹出的用户控件如何设置居中呢?用上Prism的Dialog.WindowStyle就可以对用户控件的弹窗设置窗体的属性了。-- 最后一条就是,其它的也可以设置。原创 2024-03-26 13:53:53 · 260 阅读 · 0 评论 -
Prism的发布和订阅
我这里的需求是将消息传递给消息队列(起作用的是一个将消息传递给消息队列这么一件事情,所以这里的Subscribe是一个Action;Public发布的只是string类型的消息所以string类型就行了)-- 这里发布和订阅的消息是string类型所以就只用PubSubEvent类。又看了一下它是订阅到一个方法中的,记住就好(理解:发布都是很少东西,订阅就一大堆)-- 只要有消息发布,订阅部分就会响应,除非是取消订阅了。--我这里用的是拓展方法所以用起来也是更加方便。当然该有的发布和订阅类还是要有的。原创 2024-03-18 01:07:59 · 496 阅读 · 0 评论 -
Prism对话服务
弹窗的窗口ViewModel需要使用IDialogAware;这个接口会带上一个RequestClose的Action,作用就是返回窗体的值。这里的弹窗是窗体来的。原创 2024-03-18 00:43:59 · 368 阅读 · 0 评论 -
视觉树和逻辑树的区别
可以使用System.Windows.Media中的LoginTreeHelper和VisualTreeHelper对视觉树和逻辑树进行遍历。1、观察可以看到逻辑树其实就是跟xaml的布局结构是一样的(应用程序中所有控件的元素的层次结构)。使用工具snoop可以观察到视觉树(使用:运行软件->将该软件右边的十字架拉到在运行的wpf窗体中)3、视觉树渲染细节:颜色、动画、布局,边框、背景、布局、样式,暴露视觉的实现细节。6、逻辑树注重结构,视觉树包含渲染的所有细节。4、模板内的元素不包含在逻辑树中。原创 2024-03-14 08:41:24 · 433 阅读 · 0 评论 -
WPF图表库LiveCharts的使用
这个LiveCharts非常考究版本,它有非常多个版本,.net6对应的是LiveChart2。我这里的wpf项目是.net6,所以安装的是这三个,搜索的时候要将按钮“包括愈发行版”打勾。问题就来了,git下载下来却总是编译不成功,不知道为什么,有空再琢磨。原创 2024-03-13 20:24:03 · 898 阅读 · 0 评论 -
WPF使用materialdesign报错:IOException: 找不到资源“themes/materialdesigntheme.defaults.xaml”。
背景:搞了好久,跟着别人装这个md库,找了几份试下来多不行,结果就是查csdn看到有人说是5.0版本在配置上有更新。后面又尝试了其它的.net版本用这个也不行,那就将WiKi上的资源都排列组合一下,直到能用。这个是App.xaml的加载资源。原创 2024-03-13 15:44:14 · 1175 阅读 · 0 评论 -
Prism区域管理实现导航
解释:这里的跨模块指的是View位于不同的类库中(图中的ModuleA和ModuleB就是WPF的类库,Prism127是Prism.DryIoc的空项目),然后Prism127项目的写法跟上面没跨模块访问的差不多,都是实现了导航。通过这种方法就不需要ModuleA和ModuleB类库的引用的,变为使用他们两个的dll,这里写的是bin/debug/net6.0-windows,这样就可以将AB两个类库装到Modules文件夹下了,".\"则表示运行的当前文件。Title对应的消息就是Hello。原创 2024-03-12 13:25:44 · 809 阅读 · 0 评论 -
WPF中的ListBox样式(没被选择有点模糊,选中清晰,鼠标进入变大,移出变小)
【代码】WPF中的ListBox样式(没被选择有点模糊,选中清晰,鼠标进入变大,移出变小)原创 2024-03-11 21:00:58 · 582 阅读 · 0 评论 -
ListBox显示图片的一些问题
显示图片的方案就是:自定义一个Photo类,里面有属性Source;View再绑定ViewModel中的Photo集合,再到View中给ListView设置数据模板。-- 将这个数据模板放到Window.Resources中也会起作用的,即使ListBox中绑定的是一个Photo类型的集合。如果想要这些图片横向排列,就得设置ItemsPanel。关键点:这样做很容易忘记写数据模板。原创 2024-03-11 15:37:55 · 552 阅读 · 0 评论 -
WPF资源的继承
这是时候有些控件可能需要一个样式在这个基础上加一点内容的。如果是普通有key的就basedon后面接静态资源就行了。假设这里有一个全局的资源。原创 2024-03-11 14:53:07 · 833 阅读 · 0 评论 -
WPF自定义快捷命令
- 其中的Executed就是摁下快捷键要调用code_behind的方法。2、在xaml中使用该类。原创 2024-03-10 20:41:40 · 352 阅读 · 0 评论 -
FocusVisualStyle通常是键盘焦点样式
- 这个样式是显示外边框有间隔的红点(虚线),起主要作用的是StrokeDashArray属性;这个样式如果Button直接引用的话会让Content显示不正常,所以就需要让控件模板设置"ContentPresenter",然后这个属性通常需要结合Border进行使用。-- 经过这样设置后Button就可以引用的Content显示正常,按钮周边也有虚线。设置了Button的FocusVisualSytle但是死活没有效果,查了一下这个是键盘焦点样式,摁下Tab键了才能让Button有焦点。原创 2024-03-10 16:40:07 · 371 阅读 · 0 评论 -
Storyboard动画、EventTrigger事件触发器
就是动画,要注意的就是EventTrigger中的SourceName就是想要实现这个功能的按钮。原创 2024-03-10 15:11:22 · 354 阅读 · 0 评论 -
TextBox中的Validation属性
作用:Validation可以使用Validation.ErrorTemplate指定如果输入不符合验证使用的控件模板,TextBox.Text中的Binding中有Binding.ValidationRules指定验证规则。-- 写得有点多了,其实主要就Validation.ErrorTemplate和Binding.ValidationRules。错误的时候使用的控件模板。原创 2024-03-09 21:58:09 · 378 阅读 · 0 评论 -
使用依赖属性封装控件
- 这个控件就是一个比普通TextBox多一个属性的自定义控件,这个bool属性就可以设置触发器来进行不一样的显示。使用code_behind简单封装控件,增加一个属性(依赖属性),给触发器做标记。-- 这里增加一个bool属性IsHightLight。-- 显示的内容就是没有通过校验会在右边有个框显示出来。不单是做标记,还可以让依赖属性让自己定义的控件有功能。1、依赖属性驱动触发器Trigger使用。使用的时候就可以用依赖属性设置报错的内容。2、封装自己有校验功能的TextBox。原创 2024-03-09 21:39:44 · 578 阅读 · 0 评论 -
多层菜单的实现方案(含HierarchicalDataTemplate使用)
- 这里的ItemsSource是集合,使用其它方式绑定上也是一样的;下面是Winform的递归添加菜单栏数据,数据设置好父子id方便递归使用。2、WPF中可以使用HierarchicalDataTemplate非常方便。使用HierarchDataTemplate后可以显示多层的控件都可以使用。在WPF中也是差不多的可以用递归实现加载TreeView。在TreeView的控件窗口加载时,调用递归加载菜单。这个页面的ViewModel,通过递归加载菜单。原创 2024-03-07 20:41:09 · 631 阅读 · 1 评论 -
ItemTemplateSelector 数据源选择器,控件模板选择器
背景:GridView、ListBox中的数据,如果需要不同的数据显示不同的模板,这个时候适合使用ItemTemplateSelector。1、window.Resources中定义两个数据模板,同一个数据集合,不同的数据使用不同的数据模板。3、在ListView中原本的DataTemplate替换为ItemTemplateSelector。-- 这里使用Student集合,属性有id和name。2、创建一个新的类重写SelectTemplate。在window.Resources中引入该类。原创 2024-03-07 19:33:33 · 454 阅读 · 0 评论 -
枚举类型绑定ComboBox
2、xaml中的资源中定义ObjectDataProvider。3、样例为DataGirdComboBoxColumn的使用。-- 这里的Status是类中的枚举类型属性。原创 2024-03-07 00:28:20 · 434 阅读 · 0 评论 -
通过ListView展示集合中的内容
【代码】通过ListView展示集合中的内容。原创 2024-03-06 20:26:37 · 332 阅读 · 0 评论 -
封装自己的Canvas(左上角显示面板的长宽)
1、创建一个新窗口或页面,要将Title去掉,code_behind分布类中的父类改为Canvas。3、code_behind中实现事件。原创 2024-03-05 09:16:01 · 338 阅读 · 0 评论 -
WPF绑定相关
WPF绑定概念基础(四大组成,绑定方向,绑定触发)_wpf调试时修改xmal绑定才生效-CSDN博客https://www.cnblogs.com/pengjinyu/archive/2009/08/19/1549853.html原创 2024-02-08 21:20:28 · 366 阅读 · 0 评论 -
MVVM下的窗口关闭
在VM中设置关闭窗口的委托,可以是Action;View中绑好这个Command,code_behind中将VM中的Action绑定上this.Close()方法。第三步:让View的code_behind接上这个接口并实现方法,方法的内容就是调用Close()方法关闭窗口。显然如果直接将整个Window传给VM中的Command那肯定是不太好的,这个时候可以借助接口传过去。-----------甚至可以反过来-------------------------------原创 2024-02-01 17:48:28 · 690 阅读 · 0 评论 -
WPF自定义控件,聚合器模式传递消息
背景:自定义控件的消息传递和方法的调用可以使用聚合器来进行。原创 2024-01-27 17:42:33 · 1076 阅读 · 2 评论 -
WPF引用halcon的HSmartWindowControlWPF控件一加上Name属性就,无缘无故运行后报错
解决:到NuGet上面把“System.Drawing.Common。”装一遍就行了,这个库是图像渲染和处理相关的。原创 2024-01-23 23:56:26 · 1308 阅读 · 2 评论 -
WPF关键帧动画
背景:要实现动画已经有关键动画了,但是关键动画如果动画比较复杂,那么就需要重复写多个DoubleAnimation。如果使用上关键帧就可以少写几遍Storyboard里面的属性。-- 这里体现的是关键帧作用于X坐标。原创 2024-01-23 16:21:22 · 804 阅读 · 0 评论 -
WPF行为
背景:实现按钮鼠标移动到上方有点交互效果或变一下有阴影。这样使用触发器就行了,但是如果是每个控件都有效果的话使用行为更加合适。1、下载NuGet包:Microsoft.xaml.behavior.wpf。2、创建行为类EffectBehavior,对Behavior进行重写。-- 就是简单加上鼠标移动到控件上面加上阴影效果。4、将自己重写的behavior给控件使用。3、在xaml中引入NuGet的命名空间。总结:对Behavior进行重写罢了。同样也是这个NuGet的使用。原创 2024-01-22 23:34:27 · 872 阅读 · 2 评论 -
WPF多值转换器(多属性绑定)
- 转换器返回的是一个SolidBrush,其实就是相当于在这个地方写个SolidBrush。-- Fill中绑定的资源是Window.Resources中引入进来的转换器key。-- 就是转换器类接上接口“IMultiValueConverter”背景:实现Slider拖动可以调整rgb。原创 2024-01-22 22:35:02 · 887 阅读 · 0 评论 -
WPF传递任意控件或任意控件的属性给ViewModel
- 这个source就是iamge1的属性Source,在ViewModel中入参要使用ImageSource类型。使用:CommandParameter="{Binding Source= {x:reference image1}}"使用:CommandParameter = "{Binding Source, ElementName=iamge1}"以Image控件为例子,这个控件可以在任何地方,只要给它设置好了Name属性(这里是”image1“)其它属性的传递也是可以的比如Name这些。原创 2024-01-17 22:22:14 · 878 阅读 · 0 评论 -
WPF中Image控件Source的多种指定方式
(1)Source="pack://application:,,,/label里面的Content;-- 其中“folder”是文件夹,“label里面的Content”是命名空间,”component“是固定的。然后使用就直接Source="{StaticResouce keyName}"3、将图片放到App.xaml中,再StaticResource指定。2、使用ImageSourceConverter,这样写得比较复杂。2、将图片放到项目里面,设置图片为资源;1、直接绝对路径直接给Source。原创 2024-01-17 21:20:49 · 1803 阅读 · 0 评论 -
WPF触发器总结搬运
等待按钮获得键盘焦点,当获取焦点时会将前景色设置为深红色。</Trigger></Style>XMLCopy只要停止应用触发器,元素就会恢复到正常外观。在该例中,这意味着只要用户使用Tab键让按钮失去焦点,按钮就会恢复为通常的灰色背景。转载 2024-01-15 20:52:28 · 430 阅读 · 0 评论 -
MvvmToolkit的使用
- 这里有个需要注意的点就是:RelayCommand的第二个参数无法实时跟IsEnable属性绑定,因此需要在IsEnable更新的时候调用RelayCommand的NotifyCanExecuteChanged()方法进行通知Button。-- 实现的就是等个1.5s再操作,模拟一下数据的处理需要的时间,这个时候可以拓展一下地在前端显示个转圈圈,实现起来就是绑定一下ButtonClickCommand的IsRunning属性就行。--直接写个特性上去给字段就可以实现set的功能,也是包含通知的。原创 2024-01-06 16:46:14 · 786 阅读 · 0 评论 -
WPF触发器的多种写法
它们的绑定上下文都是‘ItemsControl’的每个子项(RelateiveSource指的是当前。-- 这个对比Mode是TemplatedParent的写法是简写,TemplatedParent是没有简写的。那么问题就来了,注释的写法好像在其它情况下也是可以的啊,但是就是没有效果,为什么呢?这里的上下文是Border,不是ItemsControl的子项,绑定不到属性中的。背景:就在上面的触发器样式定义过程中,发现绑定的写法可以有很多种。生成的每个子项的容器(通常是一个。原创 2024-01-06 00:32:12 · 846 阅读 · 0 评论 -
WPF美化ItemsControl1:不同颜色间隔
如果想要数据之间有间距,可以使用数据模板,将数据放到TextBlock中显示,这样就可以设置间距了。如果还想要让数据隔一行显示不同背景就可以使用触发器来进行设置。首先我们有的是一个绑定好数据的ItemsControl。--- 重点是设置2个就是一个间隔。运行后呢是朴素的将数据竖着排列。原创 2024-01-05 21:40:07 · 859 阅读 · 0 评论 -
WPF容器的背景对鼠标事件的影响
背景:在实现鼠标拖动窗口的过程中发现对父容器设置了鼠标拖动窗口的事件MouseLeftButtonDown。因此需要设置了Background了才能命中该容器,如果不需要颜色的可以设置为Transparent。问题:非常困惑的是,竟然有的地方可以被点击拖动,但是有的却不行。而且只有在设置了Background的这个地方是可以被点击拖动的。搜索了好一会发现确实是Background的问题。原创 2024-01-02 20:22:29 · 1011 阅读 · 0 评论 -
WPF中MVVM手动实现PropertyChanged和RelayCommand
- 使用上特性[CallerMemberName]的作用就是由原本调用这个方法的使用要传入属性的名称作为这个方法的参数,但是现在就不用了,直接调用方法,会自动将参数(这里是属性的名称)传过去。背景:PropertyChanged和Command总是没有记住怎么写。原创 2024-01-02 01:09:32 · 1059 阅读 · 0 评论 -
WPF实现拖拽获取文件
然后转到注册的事件中,在DragEventArgs中处理拖拽过来的文件 ((DataObject)e.Data).GetFileDropList() 可以获取所有的拖拽过来的文件。-- 这个时候会在code_behind中注册事件Window_Drop。使用场景:直接拖动视频到软件中就可以实现视频的播放。原创 2023-12-31 16:52:08 · 532 阅读 · 0 评论 -
WPF中数据绑定转换器Converter
在xaml中查看Converter的定义可以知道Converter是一个接口类型,因此转换器的类定义需要使用这个接口。使用场景:ViewModel中的数据如果跟View中的数据类型不匹配。-- 方法中value就是xaml中的传入值。然后通过静态资源按照key直接使用就行了。下面是以int类型调控是否可见为例子。步骤一:创建转换器类。原创 2023-12-25 13:24:07 · 1044 阅读 · 0 评论 -
WPF使用自定义、用户控件通过依赖属性使用Binding
--为什么使用依赖属性呢?需要这样子才能在引用这个自定义控件后实现对该自定义控件的绑定,更好地使用MVVM。--这里就只是简单地绑定上了自己code_behind里面的属性Text,还加上了一个实时更新。--code_behind里面有个属性,有个依赖属性,还有一个依赖属性回调。--这个v就是自定义控件的命名空间。比如这里的自定义控件是对TextBox进行包装。原创 2023-12-24 22:32:30 · 1442 阅读 · 0 评论 -
WPF中的TextBox如何做到每次敲击键盘都触发绑定的源属性立即更新呢?
在属性中加上:原创 2023-12-24 22:05:29 · 513 阅读 · 0 评论