背景业务开发过程中遇到一个日期范围选择的需求,和ElementUI的DateTimePicker组件比较类似,由两个日历控件组成,联动选择起始时间和结束时间。问题WPF中提供了一个DatePicker的控件,主要由DatePickerTextBox、Button和一个Calendar组成,其中Calendar是后台代码动态添加的,因此不能直接通过自定义DatePicker的控件模板实现需求。这里通过实现自定义DateTimePicker控件来满足需求。技术要点与实现由于Calendar结构比较复杂,本文通过控件组合的方式简单实现自定义DateTimePicker。先来看下实现效果。首先创建一个
前言总目录在上一章中,初步的认识了WPF,那么这一章将逐个的认识一些常用的控件以及这些控件的常用属性,这对于我们我们后续开发WPF程序是非常有必要的。一、Window窗体1、Window基本用法(1)Winodw窗体派生自ContentControl,有一个Content属性,里面可以放一个任意控件,因此Window下只可放一个子元素(2)Window常用属性:Icon设置窗体的图标,ShowInTaskbar是否在任务栏项目窗体图标,WindowState窗口显示方式等等还有很多,可以自行设置看看。2、去除原生边框,设置自定义背景和圆角的窗体日常开发中:最常用的是,去掉原生的Window边框
背景应用开发过程中,常常会对用户输入内容进行验证,通常是基于类型、范围、格式或者特定的要求进行验证,以确保输入符合预期。例如邮箱输入框校验输入内容是否符合邮箱格式。在WPF中,数据模型允许将ValidationRules与Binding对象关联,可以通过继承ValidationRule类并重写Validate方法来创建自定义规则。问题尽管创建自定义校验规则可以满足大部分应用场景,但是当我们校验规则是动态变化的时候就有些麻烦了。例如,开发一个文件管理系统,要求文件名不能与系统中已有的文件重名。这个时候需要先获取到系统中已有文件的名称列表,并绑定到ValidationRule上。然而Validat
引言今天在做一个设置文件夹路径的功能,就是一个文本框,加个按钮,点击按钮,弹出FolderBrowserDialog再选择文件夹路径,简单做法,可以直接StackPanel横向放置一个TextBox和一个ImageButton,然后点击按钮在后台代码中给ViewModel的FilePath赋值。但是这样属实不够优雅,UI不够优雅,代码实现也可谓是强耦合,那接下来我分享一下我的实现方案。目标做这个设置文件夹路径的功能,我的目标是点击任何地方都可以打开FolderBrowserDialog,那就需要把文本框,按钮作为一个整体控件,且选择完文件夹路径后就给绑定的ViewModel的FilePath赋
在UI界面中,树形视图是比较常用的表示层级结构的方式,WPF中提供了TreeView控件。对于TreeView控件的基本使用已经有很多文章。大都是介绍如何在XAML中使用硬编码的固定信息填充Treeview控件,或者是后台代码递归遍历数据源,动态创建TreeView。这里我想介绍一下如何只通过XAML标记,不用一行后台代码遍历数据实现TreeView。技术要点与实现本文的技术关键点是层级式数据模板HierarchicalDataTemplate。HierarchicalDataTemplate是一个特殊的DataTemplate,它能够包装第二层模板。通过ItemsSource属性查找下一层级
在项目中有的时候可能会用的画虚线或者设置线的流动效果,这个时候可能会使用到线控件。属性说明描述X1起始x轴坐标X1="10"Y1起始Y轴坐标Y1="10"X2结束X轴坐标X2="100"Y2结束Y轴坐标Y2="100"Stroke线条颜色Stroke="Red"StrokeThickness线条粗细StrokeThickness="2"StrokeDashArray设置虚线管道流动效果可以用虚线表示可以用这个属性做流动线效果。StrokeDashArray="3,1,2,5",(规律是第一位可视,第二位隐藏,第三位可视,第四位隐藏)循环StrokeDashArray="3,1,2",(规律是第
滴咚,大家好久不见💖。好就没写东西了,鸽着鸽着就无了😭。。。回到正题,上篇文章说完命令提了一嘴MVVM模式直接就上MVVMLight这些程序的框架了,虽然也没说多少,但还是有点不好过渡,这篇对MVVM做一些系统学习,同时复习一下前几篇博文中的内容,完成一个采用MVVM模式的示例Demo。🎶小插曲给N早之前文章中的可能混淆的内容做下说明-关于WPF入门笔记-04-数据绑定-OneWayToSource文本框爆红现象:在那篇文章一开始给初值是没问题的,因为OneWayToSource是将数据从绑定目标传递到绑定源,所以不给初值一定会出现绑定失败的问题文本框爆红我觉得和绑定模式没有关系,我猜测和文本
VisualBrush 背景图 Background上画,线条(LineGeometry)、几何图形(RectangleGeometry)、椭圆(EllipseGeometry)、弧线(ArcSegment )、各种控件等,相对与DrawingBrush书写更简单一些。 属性说明备注Viewport(从左向右,从上向下,图像宽度放大比例,图像高度放大比例)放大背景图,Viewport="0,0,85"(X Y W H) 默认表示比例:调整图像的大小位置ViewboxUnits设置上面属性的比例为绝对值。ViewboxUnits="Absolute"TileMode设置平铺方式TileMode
背景前一段时间ChatGPT类的应用十分火爆,这类应用在回答用户的问题时逐字打印输出,像极了真人打字回复消息。出于对这个效果的兴趣,决定用WPF模拟这个效果。真实的ChatGPT逐字输出效果涉及其语言生成模型原理以及服务端与前端通信机制,本文不做过多阐述,重点是如何用WPF模拟这个效果。技术要点与实现对于这个逐字输出的效果,我想到了两种实现方法:方法一:根据字符串长度n,添加n个关键帧DiscreteStringKeyFrame,第一帧的Value为字符串的第一个字符,紧接着的关键帧都比上一帧的Value多一个字符,直到最后一帧的Value是完整的目标字符串。实现效果如下所示:方法二:首先把T
根据客户需求,要在TreeView目录树上显示10万+个节点,但是目录树显示10万加节点后,整个页面操作起来非常卡,所以给目录树增加了虚拟化设置。但是虚拟化设置一直没生效,后来经过排查发现是使用的自定义滚动条导致了虚拟化设置没有生效,后来自己写了一个滚动条样式,问题解决了。目录树虚拟化设置属性WPF虚拟化技术https://blog.51cto.com/u_15127512/4364505 属性说明描述VirtualizingStackPanel.IsVirtualizing开启虚拟化属性VirtualizingPanel.IsVirtualizing="True" Virtualizing