随笔分类 -  WPF

摘要:我从一万二千年前开始写XAML,这么多年用了很多各式各样的工具,现在留在电脑里的、现在还在用的、在写WPF时用的也就那么几个。这篇文章总结了这些工具,希望这些工具可以让WPF开发者事半功倍。 1. Visual Studio Visual Studio应该无需介绍,它是“面向任何开发者的同类最佳工具 阅读全文
posted @ 2020-03-30 09:16 dino.c 阅读(13939) 评论(18) 推荐(38) 编辑
摘要:1. 什么是Validaion.ErrorTemplate 数据绑定模型允许您将与您Binding的对象相关联ValidationRules。 如果用户输入的值无效,你可能希望在应用程序 用户界面 (UI) 上提供一些有关错误的反馈。 提供此类反馈的一种方法是设置Validation.ErrorTe 阅读全文
posted @ 2020-02-27 08:56 dino.c 阅读(3015) 评论(12) 推荐(7) 编辑
摘要:1. 需求 上图这种包含多选(CheckBox)和单选(RadioButton)的菜单十分常见,可是在WPF中只提供了多选的MenuItem。顺便一提,要使MenuItem可以多选,只需要将MenuItem的 属性设置为True: 不知出于何种考虑,WPF没有为MenuItem提供单选的功能。为了在 阅读全文
posted @ 2020-02-24 09:17 dino.c 阅读(2380) 评论(3) 推荐(9) 编辑
摘要:1. 前言 Xceed wpftoolkit提供了一个 "CheckListBox" ,效果如下: 不过它用起来不怎么样,与其这样还不如参考UWP的ListView实现,而且动画效果也很好看: 它的样式如下: 属性是很多了,但这里没有自定义CheckBox样式的方法,而且也没法参考它的动画如何实现。 阅读全文
posted @ 2020-02-17 09:36 dino.c 阅读(2284) 评论(1) 推荐(9) 编辑
摘要:1. 为什么需要ProgressRing 虽然我认为这个控件库的控件需要模仿Aero2的外观,但总有例外,其中一个就是ProgressRing。ProgressRing是来自UWP的控件,部分代码参考了 "这里" 。ProgressRing的使用方式运行效果如下: 在Windows 10中Progr 阅读全文
posted @ 2019-10-21 09:17 dino.c 阅读(2383) 评论(5) 推荐(6) 编辑
摘要:1. 什么是滚动轮劫持 这篇文章介绍一个很简单的继承自ScrollViewer的控件: 所有代码就这么多,这个ExtendedScrollViewer 只是用来解决滚动轮劫持(scroll wheel hijack)的问题。所谓的滚动轮劫持,简单来说即是在一个可以滚动的页面使用鼠标滚轮滚动页面的过程 阅读全文
posted @ 2019-08-27 22:24 dino.c 阅读(3395) 评论(7) 推荐(7) 编辑
摘要:1. 在WPF怎么在UI上添加超级链接 这篇文章的目的是介绍怎么在WPF里创建自定义的HyperlinkButton控件。很神奇的,WPF居然连HyperlinkButton都没有,不过它提供了另一种方式用于在UI上添加超级链接: 如果需要在超级链接里放图片或其它东西,代码如下: 这真是很怪,为什么 阅读全文
posted @ 2019-08-22 09:41 dino.c 阅读(2344) 评论(6) 推荐(5) 编辑
摘要:1. 前言 上一篇文章介绍了使用Resizer实现Expander简单的动画效果,运行效果也还好,不过只有展开/折叠而缺少了淡入/淡出的动画(毕竟Resizer模仿Expander只是附带的功能)。这篇继续Measure的话题,自定义了一个带有动画的ExtendedExpander。 2. Exte 阅读全文
posted @ 2019-07-24 22:13 dino.c 阅读(3526) 评论(2) 推荐(6) 编辑
摘要:1. 前言 这篇文章介绍WPF UI元素的两步布局过程,并且通过Resizer控件介绍只使用Measure可以实现些什么内容。 我不建议初学者做太多动画的工作,但合适的动画可以引导用户视线,提升用户体验。例如上图的这种动画,这种动画挺常见的,在内容的高度改变时动态地改变自身的高度,除了好看以外,对用 阅读全文
posted @ 2019-07-17 20:47 dino.c 阅读(2640) 评论(13) 推荐(6) 编辑
摘要:1. 前言 A long time ago in a galaxy far, far away....微软在Silverlight Toolkit里提供了一个好用的VisualTreeExtensions,里面提供了一些查找VisualTree的扩展方法。在那个时候(2009年),VisualTre 阅读全文
posted @ 2019-07-11 09:09 dino.c 阅读(1735) 评论(6) 推荐(5) 编辑
摘要:1. 强化高亮的功能 "上一篇文章" 介绍了使用附加属性实现TextBlock的高亮功能,但也留下了问题:不能定义高亮(或者低亮)的颜色。为了解决这个问题,我创建了 这个类,比单纯的字符串存储更多的信息,这个类的定义如下: 相应地,附加属性的类型也改变为这个类,并且属性值改变事件改成这样: 的关键代 阅读全文
posted @ 2019-06-26 08:59 dino.c 阅读(1542) 评论(0) 推荐(3) 编辑
摘要:1. 如何让列表的内容更容易查找 假设有这么一个列表(数据源在本地),由于内容太多,要查找到其中某个想要的数据会比较困难。要优化这个列表,无非就是排序、筛选和高亮。 改造过的结果如上。 2. 排序 在WPF中要实现数据排序的功能有很多种,例如用Linq,但这种场景的标准做法是使用 "Collecti 阅读全文
posted @ 2019-06-24 09:13 dino.c 阅读(4213) 评论(5) 推荐(6) 编辑
摘要:1. 为什么要自定义RibbonWindow 自定义Window有可能是设计或功能上的要求,可以是非必要的,而自定义RibbonWindow则不一样: 如果程序使用了自定义样式的Window,为了统一外观需要把RibbonWindow一起修改样式。 为了解决RibbonWindow的BUG。 如上图 阅读全文
posted @ 2019-06-13 09:15 dino.c 阅读(3316) 评论(1) 推荐(3) 编辑
摘要:1. 前言 "上一篇文章" 介绍了使用WindowChrome自定义Window,实际使用下来总有各种各样的问题,这些问题大部分都不影响使用,可能正是因为不影响使用所以一直没得到修复(也有可能别人根本不觉得这些是问题)。 这篇文章我总结了一些实际遇到的问题及其解决方案。 2. WindowChrom 阅读全文
posted @ 2019-06-12 09:03 dino.c 阅读(9777) 评论(13) 推荐(14) 编辑
摘要:1. 为什么要自定义Window 对稍微有点规模的桌面软件来说自定义的Window几乎是标配了,一来设计师总是克制不住自己想想软件更个性化,为了UI的和谐修改Window也是必要的;二来多一行的空间可以添加很多功能,尤其是上边缘,因为被屏幕限制住鼠标的移动所以上边缘的按钮很容易选中。做桌面开发总有一 阅读全文
posted @ 2019-06-11 09:01 dino.c 阅读(11911) 评论(14) 推荐(14) 编辑
摘要:1. 前言 本来打算写一篇《自定义Window》的文章,但写着写着发觉内容太多,所以还是把使用WindowChrome自定义Window需要用到的部分基础知识独立出来,于是就形成了这篇文章。 无论是桌面编程还是日常使用,Window(窗体)都是最常接触的UI元素之一,既然Window这么重要那么多了 阅读全文
posted @ 2019-06-10 09:36 dino.c 阅读(6562) 评论(3) 推荐(10) 编辑
摘要:1. 前言 我常常看到同一个应用程序中的表单的按钮————也就是“确定”、“取消”那两个按钮————实现得千奇百怪,其实只要使用统一的Style起码就可以统一按钮的大小,而我喜欢更进一步将”确定“、”取消“或其它按钮封装进一个自定义控件里。 这篇文章介绍了另一种ItemsControl的实现方式,并 阅读全文
posted @ 2019-06-05 09:04 dino.c 阅读(1795) 评论(7) 推荐(1) 编辑
摘要:1. 需求 加载后让第一个输入框或者焦点是个很基本的功能,典型的如“登录”对话框。一般来说“登录”对话框加载后“用户名”应该马上获得焦点,用户只需输入用户名,点击 ,再输入密码,点击回车就完成了登录操作。 在WPF中要让一个控件在加载时获得焦点应该很简单,只需要在Loaded事件后调用 就行了。但有 阅读全文
posted @ 2019-06-03 09:02 dino.c 阅读(2184) 评论(4) 推荐(4) 编辑
摘要:1. WPF布局一个表单 在WPF中布局表单一直都很传统,例如使用上面的XAML,它通过Grid布局一个表单。这样出来的结果整整齐齐,看上去没什么问题,但当系统里有几十个表单页以后需要统一将标签改为上对齐,或者标签和控件中加一个:号等需求都会难倒开发人员。一个好的做法是使用某些控件库提供的表单控件; 阅读全文
posted @ 2019-05-29 09:17 dino.c 阅读(6949) 评论(5) 推荐(2) 编辑
摘要:1. 为什么选择Aero2 除了以外观为卖点的控件库,WPF的控件库都默认使用“素颜”的外观,然后再提供一些主题包。这样做的最大好处是可以和原生控件或其它控件库兼容,而且对于大部分人来说模仿原生的主题也比自己设计一套好看的UI容易得多。 WPF有以下几种原生 "主题" : |主题文件|桌面主题| | 阅读全文
posted @ 2019-05-27 09:03 dino.c 阅读(2274) 评论(2) 推荐(3) 编辑