
WPF
文章平均质量分 87
分享各种WPF开发技巧、实用功能。还会有一些入门教程。持续更新中。
△曉風殘月〆
吾虽浪迹天涯,却未迷失本心。
博客园:https://www.cnblogs.com/zhaotianff github:https://github.com/zhaotianff
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
WPF实时调试的一种实现方法
如果我们需要实时查看程序输出,可以将程序的输出类型修改为。然后再配合C#的预处理器指令,就可以实现实时调试。在WPF程序中,如果我们需要对程序进行。这样我们在程序运行后,就可以得到一个。这样我们就可以实时查看调试信息。例如我在界面上放置了一个按钮,模式时,点击按钮输出当前时间。进行实时调试信息输出。时,将输出 类型改为。原创 2025-07-25 09:43:56 · 136 阅读 · 0 评论 -
WPF实时调试的一种实现方法
如果我们需要实时查看程序输出,可以将程序的输出类型修改为。然后再配合C#的预处理器指令,就可以实现实时调试。在WPF程序中,如果我们需要对程序进行。这样我们在程序运行后,就可以得到一个。这样我们就可以实时查看调试信息。例如我在界面上放置了一个按钮,模式时,点击按钮输出当前时间。进行实时调试信息输出。时,将输出 类型改为。原创 2025-05-08 10:04:31 · 426 阅读 · 0 评论 -
如何在WPF中对UI进行自动化测试(通过外部代码操作WPF内部UI元素)
记得早些年在深圳做设备的时候,公司测试使用了一款能自动测试WPF界面的工具,它能模拟点击,能记录步骤,也能获取输出。但具体名称忘记了。因为WPF界面元素是没有句柄的,所以无法对其它进行外部控制(非软件内部),所以早些年只能对的一些界面通过WinApi进行外部控制。也是最近在看代码时,看到了这个dll,就找资料来学习了一下。是适用于 Microsoft Windows 的新辅助功能框架,可在支持的所有操作系统上使用。原创 2025-04-07 09:21:35 · 1001 阅读 · 0 评论 -
WPF如何修改三方控件库的样式
nuget上的包基本是开源的,但是除非是离线环境,否则不建议将包源码直接放到工程里。--创建一个名称一样的资源即可-->如果我们想修改选中的颜色,最简单的方案就是创建一个跟控件库中一样名字的。,再修改控件模板即可,这样我们能继承大部分的样式效果。下面的修改示例是针对直接使用nuget包的。,然后找到这个资源名称,创建一个一样的即可。我们打开wpf-ui包的源码,搜索。然后我们新建一个样式,继承自。的控件模板,找到设置圆角的。首先我们在界面上添加一个。例如,当鼠标划过一个。原创 2025-04-07 09:20:13 · 1034 阅读 · 0 评论 -
WPF预览并打印FlowDocument
21 <Button Content="加载" HorizontalAlignment="Center" VerticalAlignment="Center" Width="88" Height="28" Click="Button_Click"></Button>在前面的文章中,介绍过通过FixedDocument进行预览并打印。但是有时候我们可能使用的是。原创 2025-03-10 11:28:02 · 847 阅读 · 0 评论 -
WPF中对滚动条进行平滑滚动
11 <Button Content="普通滚动" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" Width="88" Click="Button_Click" Margin="-120,0,0,0"></Button>一开始我想的是通过一个循环,缓动增加Y的位置,这样就达到了动画效果。我们也可以借助WPF的Animation来做,这样效果会更好。7 // 获取选择元素的位置。11 //滚动到指定位置。原创 2025-02-28 23:54:07 · 1193 阅读 · 0 评论 -
如何在C#中使用COM接口
Windows中很多功能都是通过COM实现的,有时候我们想实现一些系统功能,但是又没有直接的Win32 API代调用,就可以寻找COM接口替代。使用CsWin32生成COM接口的声明,在官方的文档中并未直接说明,我也是在一个issue中找到了实现方法。对于自动生成的类型,命名空间都不一样,但是都是在Windows.Win32命名空间下。在C++中,可以使用CoCreateInstance函数来创建COM接口的实例。],然后在结果中查找,一般会有C#的接口声明,如果没找到相关结果,可以查看方法2。原创 2025-01-10 13:51:36 · 1233 阅读 · 0 评论 -
WPF自定义任务栏缩略图
但是这种预览是基于窗口本身内容的,如果我们想修改这个缩略图的内容,类似网易云这样,就需要一些技术手段。参数设置的属性值的大小(以字节为单位)。当鼠标划会任务栏上的程序时,会打开一个预览窗口,可以对整个窗口内容进行预览。在后面的Windows 8/8.1/10/11系统上,都延续了这个功能。指向包含要设置的属性值的对象的指针。设置窗口管理器(DWM)非客户端呈现属性的值。窗口或选项卡的句柄。此参数指定要设置的属性,要为其设置属性值的窗口的句柄。描述要设置的值的标志,指定为。参数指向包含属性值的对象。原创 2025-01-03 09:26:26 · 1264 阅读 · 0 评论 -
WPF中的Microsoft XAML Behaviors包功能详解
提供了一种简单易用的方法,能以最少的代码为。原创 2024-12-31 09:10:55 · 1849 阅读 · 0 评论 -
WPF中的VisualState(视觉状态)
VisualState类实现了可以让控件始终处于特定的状态的功能。例如,当鼠标在控件的表面上移动时,该控件被视为处于。调用System.Windows.VisualStateManager.GoToState函数,可以指定控件的状态。在应用于控件的每个状态组中,控件始终处于每个组的一种状态。但是,控件不能处于同一组中的两种不同状态。状态分为多个组,前面提到的MouseMove状态和Normal属于。如果是自定义控件,直接将控件名换成this即可。没有特定状态的控件被视为处于。原创 2024-12-03 09:28:58 · 1533 阅读 · 0 评论 -
WPF从本地文件加载界面
在前面的文章中,我介绍过一种报告模板的实现思路。就是用的XAML本地加载。WPF使用XAML实现报表的一种思路(支持外部加载) - zhaotianff - 博客园在另外一篇文章中,介绍了XAML是如何被转换成对象的。WPF中的XAML是如何转换成对象的? - zhaotianff - 博客园在这篇文章中,简单介绍了InitializeComponent函数,它的内部如下:在任意一个界面的构造函数下都会调用InitializeComponent函数,也就是在InitializeC原创 2024-12-03 09:25:09 · 1128 阅读 · 0 评论 -
如何在WPF中打印PDF文件
当用户右键单击 Shell 对象(如文件)时,Shell 会显示 (上下文) 菜单的快捷方式。此菜单包含一个命令列表,用户可以选择这些命令对项执行各种操作。这些命令也称为快捷菜单项或谓词。可以自定义快捷菜单。6 FileName = path //PDF文件路径。时,系统会到注册表寻找当前类型文件的注册程序节点下的。所使用的的PDF渲染引擎。项目的PDF查看器。当我们在创建进程时,,并执行其中的命令。原创 2024-11-29 09:15:34 · 2171 阅读 · 0 评论 -
在WPF使用Segoe MDL2字体图标库
因为是自带的字体文件,所以直接指定FontFamily即可,非常方便。任何内容控件都可以使用。以前一直用的FontAwesome字体图标,也是最近才知道,原来微软官方就有一套字体图标库。Windows 11自带的是Segoe Fluent。Windows 10自带的是Segoe MDL2。字体文件是Windows自带。官网搜索,或者访问我的。原创 2024-11-28 16:47:05 · 1037 阅读 · 0 评论 -
如何在WPF中嵌入其它程序
这里我们以WPF嵌入WPF来进行演示,其它程序也可以嵌入,但是要注意:被嵌入的窗口必须是无边框且置顶的。像一般的窗口程序都可以设置窗口类型,如果是嵌入Unity这种无法控制窗口类型的,可以调用。此时我们还需要处理一些窗口的事件,比如最大化,最小化,移动和大小改变等。在窗口的Loaded事件中创建其它程序进程,并嵌入。其它的操作可以参考示例代码,这里不做详细介绍。在父窗口中,窗口关闭时,发送消息到子窗口即可。此时我们运行后,就可以看到窗口已经被嵌入。在WPF中嵌入其它程序,这里提供两种方案。原创 2024-11-21 09:07:08 · 2006 阅读 · 0 评论 -
调试WPF数据绑定的几种方法
命名空间错误:如System.Drawing.Brushes类型和System.Windows.Media.Brushes类型错误使用,导致在Converter中,颜色转换不生效。应用程序运行时,在运行目录下会生成一个DebugTrace.txt 文件,它里面记录了包括数据绑定的错误日志和其它任何程序运行时的错误信息。正常运行时,会发现界面没有内容显示,调试时发现属性赋值又正常,这个时候我们可以借助。数据绑定错误:这个导致的原因比较多,所以这里我们总结一下如何调试数据绑定。--诊断信息输出-->原创 2024-11-18 15:20:32 · 941 阅读 · 0 评论 -
CommunityToolkit.Mvvm中的Ioc
在软件工程中,原创 2024-11-07 09:14:42 · 984 阅读 · 0 评论 -
CommunityToolkit.Mvvm中的Ioc
CommunityToolkit.Mvvm中的Ioc使用方法原创 2024-10-31 16:56:27 · 1554 阅读 · 0 评论 -
WPF MVVM模式实现DataGrid编辑
34 <Button Grid.Row="6" Content="保存" Width="88" Height="28" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="10"14 <DataGridTextColumn Header="姓名" Width="*" Binding="{Binding Name}"/>原创 2024-10-17 09:43:24 · 1888 阅读 · 0 评论 -
WPF实现类似网易云音乐的菜单切换
11 Title="工具箱" Height="650" Width="1100" TitleForeground="{DynamicResource MahApps.Brushes.Text}" Icon="logo.png" Background="{DynamicResource MahApps.Brushes.ThemeBackground}">--标题文本,如果需要大标题显示,取消注释这段代码-->这里的一些颜色使用了动态资源 ,以便实现深色和浅色模式的切换。属性,可以设置菜单项。原创 2024-10-15 11:54:21 · 1527 阅读 · 0 评论 -
WPFDeveloper正式版发布
一个基于WPF自定义高级控件的WPF开发人员UI库,它提供了众多的自定义控件。该项目的创建者和主要维护者是现役微软MVP 闫驚鏵:WPFDeveloper从2022年6月21日 发布第一个预览版1.0.5-preview,经历了35个版本的迭代,终于推出了正式版0.0.0.1。欢迎各位小伙伴前来使用体验,在使用过程中遇到任何问题,可以到项目的下进行反馈。引入XAML命名空间添加到资源字典中--需要注意 wd:Resources 必须在配色主题后,Theme="Dark" 为黑色皮肤-->原创 2024-10-15 11:22:12 · 1848 阅读 · 1 评论 -
WPF中的常用控件
14 <DataGridComboBoxColumn SelectedItemBinding="{Binding Project}" Header="负责的项目" Width="100" ItemsSource="{Binding ProjectList}" DisplayMemberPath="{Binding ProjectName}"></DataGridComboBoxColumn>在后面介绍MVVM及绑定时,会介绍如何实现PasswordBox.Password的绑定。原创 2024-10-10 13:42:44 · 2820 阅读 · 0 评论 -
WPF中的Window类
对于非矩形的窗口,如果窗口的形状大体上还是矩形,或者窗口的内容基本是铺满整个窗口的,我们可以设置Window.ResizeMode为CanResizeWithGrip值为窗口添加一个用于改变窗口大小的手柄。需要注意的是,因为在具有更高DPI的窗口中呈现时需要使用更多的像素,背景图片可能会变得模糊,当允许用户更改窗口大小时,也会出现这一问题。通过Window.TopMost属性可以设置为窗口是否置顶,当设置TopMost为True时,窗口会置顶显示,不会被其它窗口盖住,即使焦点不在当前窗口。原创 2024-10-09 10:08:39 · 1632 阅读 · 0 评论 -
WPF中的内容控件
背景画刷和前景画刷,使用System.Windows.Media.Brush对象,常用的有System.Windows.Media.SolidColorBrush,System.Windows.Media.TileBrush,System.Windows.Media.LinearGradientBrush等。1、在WPF中进行页面导航时,会先触发页面的Initialized事件,再触发Loaded事件,如果需要在页面加载时执行指定操作,可以在Loaded事件中进行处理。原创 2024-10-09 10:06:05 · 1724 阅读 · 0 评论 -
WPF中的布局
WPF中的布局系统详解原创 2024-10-08 09:31:50 · 1796 阅读 · 0 评论 -
如何在Visual Studio 2019中创建.Net Core WPF工程
不同于.Net Framework的WPF工程,我们看不到引用了哪些GAC中的组件。实际上在Microsoft.Windows.Desktop.App.WPF框架中已经引用了WPF所需的全部组件。App.xaml的后台代码文件,它扩展了Application类。在.Net Framework的WPF程序中,该文件用于设置程序集信息。我们找到.Net Core的安装目录,可以看到系统定义了一些框架。其中Profile指的是当前使用的哪一套配置文件。系统创建的默认主窗口和主窗口的后台代码文件。原创 2024-10-08 09:30:13 · 1722 阅读 · 0 评论 -
.NET Core和WPF介绍
不同于CLR属性,WPF中实现了自己的一套属性系统--依赖属性。说明:从.NET Core 3.1开始,后面的版本直接称为.NET,如.NET 5、.NET 6、.NET 7。ContentControl类是所有具有单一内容控件的基类,控件中的单一内容可以是普通字符串,也可以是拥有各种控件组合的布局面板。包含了基础类型,如UIElement类和Visual类,所有形状类和控件类都继承自这两个类。WPF中的控件类,控件是可与用户交互的元素,如Button,Label,ListBox类等。原创 2024-09-29 14:49:00 · 1618 阅读 · 0 评论 -
WPF中的XAML详解
例如,Foreground属性使用的是Brush对象,那XAML解析就会去检查Brush类是否使用TypeConverter特性修饰。这样是Window类所具备的属性,设置不同的属性,窗口也会发生相应的改变。一般我们在WPF中添加窗口时,可以到一个xxx.xaml会带一个xxx.xaml.cs,这个xxx.xaml.cs就是后台代码类,用于处理事件。每个控件都拥有自己内部定义的属性。WPF内置控件有一个Button类,当我们引用了某个三方组件中,也有一个Button类,那这个时候,XAML是如何区分的呢?原创 2024-09-29 14:41:05 · 3001 阅读 · 0 评论 -
在WPF中实现多语言切换的四种方式
9 <s:String x:Key="Main.RibbonButton.Setting.Description">包括语言在内的全部设置</s:String>12 <s:String x:Key="Setting.Tab.Label.ChooseLanguage">请选择一种语言</s:String>//当前语言的JObject对象。8 <s:String x:Key="Main.RibbonButton.Setting.Title">设置</s:String>原创 2024-09-28 22:45:28 · 4658 阅读 · 0 评论 -
在WPF中自定义控件时如何选择基类
ItemsControl是封装列表控件的基类,但不支持选择,而Selector类是支持选择的控件的更具体类。尽管用户控件和普通的控件是不同的,但当希望在多个窗口中快速重用用户界面中的不变模块时(而不是创建真正的能在不同应用程序之间转移的独立控件),通过就使用该基类。这是能够显示任意单一内容的控件的基类。显示的内容可以是元素或结合使用模版的自定义对象(内容通过Content属性设置,并且可以通过ContentTemplate属性提供可靠的模板)这是常用的最低级的基类。)上或周围应用效果的元素的基类。原创 2024-09-19 10:29:55 · 722 阅读 · 0 评论 -
WPF创建不规则窗体时WebBrowser控件不显示的问题
最近有小伙伴需要在不规则窗体上放置WebBrowser控件,因为设置了WindowStyle="None" 和 AllowsTransparency="True"。//这里可以控制宽高。导致这个问题的原因是因为空域(airspace)问题,因为WebBrowser并不是一个原生的WPF控件,而是一个Win32控件。//point是左上角0,0的位置。//这里可以控制位置。原创 2024-09-12 14:02:37 · 1384 阅读 · 0 评论 -
在WPF中使用矢量图标
IconFont是包含符号和字形而不是字母或数字的字体。它们在网络设计人员中很受欢迎,因为可以用CSS与常规文本相同的方式设置样式。另外,它也是矢量的。最初IconFont是在Web开发中广泛使用的,但是也可以放到WPF中进行使用。原创 2024-09-10 15:18:03 · 2057 阅读 · 0 评论 -
WPF MVVM如何在ViewModel直接操作控件对象
后面的解决办法是在窗口加载时,将控件对象以参数传递到Loaded事件的处理命令中,然后将这个对象记录下来,后面就可以直接操作这个控件了。早些年在WPF中使用COM组件时,需要在ViewModel中操作COM组件中的控件对象,但是这个控件对象又不支持绑定,今天同事在使用WebView2的时候,又遇到这个问题,写个文章分享一下,给后续需要的小伙伴提供点参考。我们创建一个WPF的项目,然后在界面上放置一个WMP控件(Windows Media Player)。原创 2024-09-02 23:58:25 · 2104 阅读 · 0 评论 -
WPF中如何根据数据类型使用不同的数据模板
我们在将一个数据集合绑定到列表控件时,有时候想根据不同的数据类型,显示为不同的效果。时,系统文件夹和普通文件夹分别显示为不同的效果,就可以使用模板选择器功能。这里我们定义一个磁盘和文件夹的数据类型,一个磁盘对象可以包含多个文件夹。然后定义一个资源字典,分别在里面定义两种数据的数据模板。,它可以根据数据对象和数据绑定元素来选择。WPF提供了一个模板选择器类型。,根据不同的数据类型返回不同的。例如将一个文件夹集合绑定到。我们先定义如下的数据模型。原创 2024-08-26 17:27:26 · 2367 阅读 · 0 评论 -
WPF中如何使用后台代码动态创建数据模板(DataTemplate)
所以这里采用了工厂模式,工厂模式是一种常见的设计模式 ,它指的是根据给定的参数动态创建类型,以达到解耦的目的。3 list.Add(new Student() { Id = 2, Name = "奎文" });2 list.Add(new Student() {Id = 1,Name = "意在" });对于一些简单的数据,例如一个string,一个int,在显示时,无须额外控制。但是对于复杂数据类型,就需要使用数据模板来控制数据的呈现方式。上,我们就得到一个动态的数据模板(原创 2024-08-25 01:04:53 · 1006 阅读 · 0 评论 -
WPF中的XAML是如何转换成对象的?
我跟他说XAML的实现和后台代码实现是一样的,都会转换成对应的对象的,XAML相当于一种助记符,它内部其实还是.cs代码。到这里我们应该很清晰的看到系统是通过Application.LoadComponent函数将XAML读取,并转换成相应的类。我记得以前在哪看到过,XAML最终都是会转换为.cs代码的,但我一下也想不起来了。函数,在前面部分代码中,将XAML转换成一个流,然后再通过这个函数读取流。干脆就直接查一查WPF的内部实现好了,看看XAML是如何转换为对象的。经过查阅资料,我提供了两种解决方案。原创 2024-08-23 15:10:07 · 817 阅读 · 0 评论 -
WPF中的可视化树(VisualTree)和逻辑树(LogicalTree)
4 以上的解释仅仅用于简单理解这两个概念以及区别,完整的解释请参考文末的链接,MSDN上的文档将会更准确。通俗点来讲,就是整个元素的构成树,从最上面的结点到最后一个结点(包括控件模板)。原创 2024-08-22 15:17:36 · 1635 阅读 · 0 评论 -
WPF中如何使用后台代码动态创建数据模板(DataTemplate)
所以这里采用了工厂模式,工厂模式是一种常见的设计模式 ,它指的是根据给定的参数动态创建类型,以达到解耦的目的。3 list.Add(new Student() { Id = 2, Name = "奎文" });2 list.Add(new Student() {Id = 1,Name = "意在" });对于一些简单的数据,例如一个string,一个int,在显示时,无须额外控制。但是对于复杂数据类型,就需要使用数据模板来控制数据的呈现方式。上,我们就得到一个动态的数据模板(原创 2024-08-22 15:15:40 · 1663 阅读 · 0 评论 -
如何封装WPF控件库
如何封装WPF控件库原创 2024-08-19 15:01:17 · 1523 阅读 · 0 评论 -
WPF打印控件内容
这样操作以后,打印的大小不再是整 个窗体的大小了,但打印完之后 ,控件 的位置却发生了变化 ,这时候我们只需要再调用一次Arrange方法,将它放回原来的位置就行了。当我们想打印控件内容时,如一个Grid中的内容,可以用WPF中PrintDialog类的PrintVisual()方法来实现。这时我们会发现,虽然 打印的内容是指定的,但打印的大小却是整个窗体的大小,而不仅仅是指定的区域大小。如果 想对打印机进行设置,可以查找 WPF PrintDialog的使用方法,下面是简单的设置。原创 2024-08-16 13:42:18 · 936 阅读 · 0 评论 -
WPF窗体动态效果
WPF实现窗体动态效果,类似网页上的动态背景效果。原创 2024-08-14 10:40:03 · 1559 阅读 · 0 评论