WPF
文章平均质量分 58
muzizongheng
熟悉.net技术栈、web技术栈、ELK、xml/xslt/xsd、mfc、python等;熟悉DICOM、IHE熟悉敏捷、DDD
展开
-
WPF中应用IoC框架
CastleWindsor是.net平台下著名的IoC框架,WPF中使用非常方便。 建立一个空的WPF工程 上传App.xaml中的StartUri 重载App类里的OnStartUp方法 用nuget添加CastleWindsor工程引用,注意的是目前支持的最低的.net framework版本为4.5 在App类中声明成员变量 p...原创 2019-09-29 14:26:47 · 2834 阅读 · 0 评论 -
wpf控件提示Value ‘’ can not convert
我们在对控件的ErrorTemplate设置后,有时会出现Value ‘’ can not convert。为什么会出现呢?原因:如果控件的输入值和null不能转换(比如控件要求的是int或float类型, 而输入信息为空),就会触发默认的ExceptionValidationRule。如何自定义出错信息?首先创建自己的ValidationRule继承于Valida原创 2013-11-05 11:15:02 · 2055 阅读 · 0 评论 -
DropShadowEffect导致下拉框控件抖动
--> 我们项目中对各个系统控件都进行了自定义外观, 比如通过Style。现象:但是程序实际运行中出现了很诡异的问题, 几个下拉框在屏幕的特定位置会抖动, 具体就是在UI被发大100倍左右明显看到控件的外观有部分上下移动1像素。具体分析:经过调查, 发现和Trigger或者VisualState都没有关系, 而是下拉框的右边的ToggleButton的Templa原创 2013-11-05 11:15:56 · 2073 阅读 · 2 评论 -
再论WPF中的UseLayoutRounding和SnapsToDevicePixels
最近在调试项目中的UI时发现几个诡异问题:1.Grid容器里的GridSplitter设置粗细一样, 但截屏放大后发现线条不一样粗并且明暗不一致,导致打印出来有问题。2.自定义控件的边缘在某些窗体中显示模糊。导致以上问题的原因是:1)UserLayoutRounding为False,导致控件布局相对屏幕若不是整数则不会四舍五入,导致边缘模糊。2)SnapsToDevicePix原创 2013-11-05 11:16:49 · 9830 阅读 · 0 评论 -
WPF案例:如何设计历史记录查看UI
(CSDN博客目前不支持外链, 只能纯文字)设计WPF的UI,一般遵循下面的步骤:1.首先分析数据结构2.根据数据结构选择合理控件3.定制外观具体对于历史记录查看UI, 我们可以得知:1.记录是多条的,2.每条记录包含历史的详细信息说白了,就是2张表,一张存储历史记录的时间、地点、人物,另一张存储对应记录的详细内容。根据上述数据结构,我们原创 2013-11-08 11:37:22 · 2244 阅读 · 0 评论 -
WPF案例:如何设计搜索框(自定义控件的原则和方法)
我们平时自定义WPF控件的方法有:Style,DataTemplate,ControlTemplate, DependencyProperty, CustomControl等几个方法。按照优先顺序应该是从左到右。(所谓Style,这里仅包括Setter)对于搜索框,其组成也就是TextBox+Button(清空),这里我们用CustomControl的方法比较合适。原创 2013-11-13 14:18:45 · 4711 阅读 · 0 评论 -
WPF基本概念入门
关于数据类型,有原子类型,列表类型,字典类型等等,而wpf对应控件有contentControl,itemsControl,headerItemsControl等。控件和类型一一对应,控件和类型之间的交换则通过Binding,中间如果类型和控件需要转换可以通过Converter,交换方向则决定了Binding的mode(OneWay,TwoWay...),数据校验则通过Validati原创 2013-11-14 15:56:01 · 1502 阅读 · 0 评论 -
WPF开发中Designer和码农之间的合作
想要用WPF做出一流的软件界面, 必须要Designer和码农通力合作。理想的情况是平时并行开发,Designer用Expression套件(包括Design和Blend)来设计界面,码农开发Model和ViewModel,后续和xaml一起集成。但是,理想很丰满,现实很骨感。Blend软件毕竟还是小众软件, 很多Designer不愿意放弃自己熟悉的PS,并且Blend支持的滤镜太少,原创 2013-11-15 16:58:45 · 2260 阅读 · 0 评论 -
聊聊WPF中的Dispatcher
DispatcherObject,Dispatcher,Thread之间的关系我们都知道WPF中的控件类都是从System.Windows.Threading.DispatcherObject继承而来, 而DispatcherObject又在构造时与当前线程的Dispatcher关联起来,CurrentDispatcher如果为null则会主动new一个Dispatcher并且在构造时原创 2013-11-19 13:56:54 · 9176 阅读 · 0 评论 -
聊聊WPF中字体的设置
1. 今天帮同事调试一个字体的bug:TextBox中的中文显示大小不一致, 比如包含”杰“,”热“。原因是WPF针对点阵字体需要制定特定字体才能正确渲染, 比如中文应该设置为”SimSun:2. 如果一段文本中既包含中文又包含英文,如何不同设置字体呢?方法:FontFamily支持2个字体设置, 比如FontFamily="Arial,SimSun", 注原创 2013-11-28 17:53:04 · 16716 阅读 · 0 评论 -
Bug:DataGridCell的显示不完整
最近在使用DataGrid时遇到一个bug, 在客户机器上DataGrid的内容显示不完整, 具体表现为某些列的显示为空。具体的可视树为:DataGridCell > ContentPresenter > TextBlock。其中:TextBlock的Width为Auto, HorizontalAlignment为Stretch;ContentPresenter的With为Auto,H原创 2014-01-13 14:27:41 · 2366 阅读 · 0 评论 -
WPF中ItemsControl绑定到Google ProtocolBuffer的结构体时的性能问题
背景:最近遇到一个DataGrid的性能问题:里面大概有4000个数据, 绑定的ItemSource的类也只有一层数据,即简单的List(里面每个是Protocol Buffer自动产生的一个类,10个字段,没子类或者子列表),这么简单的数据源在一台测试机上全选4000条数据然后一直点击滚动条滚动会导致UI卡死, 整个界面无法工作。其中:1.所有的虚拟化相关的都已经设置2.原创 2014-04-09 13:47:48 · 1840 阅读 · 0 评论 -
WPF中DataGrid控件的过滤(Filter)性能分析及优化
DataGrid控件是一个列表控件, 可以进行过滤,排序等。本文主要针对DataGrid的过滤功能进行分析, 并提供优化方案。1)DataGrid的过滤过程: 用户输入过滤条件 调用DataGrid的CollectionViewSource的View.Refresh()功能 DataGrid控件内部调用CollectionView的RefreshOv原创 2013-10-08 14:45:39 · 10717 阅读 · 0 评论 -
wpf中为DataGrid添加checkbox支持多选全选
项目中用到DataGrid, 需要在第一列添加checkbox, 可以多选、全选。其中涉及的概念DataTemplate, DataGridCellStyle, DataGridCellControlTemplate,Binding, OnPropertyChanged等。有下面是实现思路:1.继承INotifyPropertyChanged接口,实现OnPropert原创 2013-08-02 15:17:10 · 17962 阅读 · 3 评论 -
关于Snoop的用法
snoop是开发wpf应用程序的利器。用它可以观察WPF的可视树,监听事件,更改元素属性等。下面我介绍下snoop一些用法。1.获取指定应用程序的UI 打开snoop,选择“Drag and Drop this crosshairs over wpf window inorder to snoop it” 按钮, 拖动它到你要观察的wpf窗体上。原创 2013-07-18 10:37:37 · 7599 阅读 · 7 评论 -
(一):WPF体系结构
WPF的体系结构一般如下:(MSDN)(维基百科)我们重点介绍下第2张图,它细化了第一张图的内容。整个体系分为3层1.托管WPF层PresentatinFoundation 提供布局、样式、控件、2D、3D、文字、图像、动画、媒体、数据绑定、文档PresentationCore 主要是MIL的托管包装,提供可视化系统,创建可视化树的一些类并负责渲染。比如Visual等核心类CLR 大家熟知的公原创 2016-05-08 17:33:06 · 5696 阅读 · 0 评论 -
WPF知识图
空闲时间我列了下WPF的知识图谱, 如下:原创 2016-05-08 17:27:34 · 5058 阅读 · 0 评论 -
答网友疑问:如何动态设置ItemControl的GroupStyle
首先,要说声对不起,因为我很少看网页里公众号的留言,因此有些都没看到, 或者看到后已经无法回复。今天看到@鱼儿 问到一个问题这个问题一般就是各种Selector来实现, 比如DataTemplateSelector, 或者这次要用到的StyleSelector。具体示例如下:1.在资源中定义不同的Group 的style2.实现后端的GroupStyleSelector3.前端xaml中声明资原创 2016-04-22 01:08:32 · 4325 阅读 · 1 评论 -
WPF核心类图谱
有空列出WPF核心类图谱,如下:原创 2016-05-11 22:44:59 · 7874 阅读 · 0 评论 -
WPF的TextBox抛出InvalidOperationException异常:Cannot close undo unit because no opened unit exists.
最近遇到一个问题,应用使用过程中突然崩溃,查看dump发现异常信息如下:UI dispatcher has encountered a problem:无法关闭撤消单元,因为不存在已打开的单元。在 at MS.Internal.Documents.UndoManager.Close(IParentUndoUnit unit, UndoCloseAction closeAction) at原创 2016-02-29 19:07:10 · 3056 阅读 · 3 评论 -
WPF中的DataGrid的RowDetail显示问题
背景:.net 4.0中的DataGrid如果我们把RowDetail的内容弄的很大, 超出当前屏幕可显示的范围。那么当我们DataGrid按行滚动时,拖到滚动条只能看到下一行,前一行的rowDetail看不见的部分并不会因为拖到滚动条就能看到。原因我们也说了, 因为我们按照行滚动而不是按照像素滚动。解决方案:如果要看到RowDetails,只能按照像素滚动。 但在.net 4.0上,一旦设置原创 2016-02-28 22:45:42 · 4833 阅读 · 0 评论 -
TextBlock截断字符显示为....
添加: TextTrimming="CharacterEllipsis"到TextBlock中, 即可让TextBlock 支持截断字符显示为。。。原创 2013-07-10 15:44:44 · 1775 阅读 · 0 评论 -
DataGrid 支持字符截断显示
DataGrid支持截断时, 需要分2部分, DataGridColumnHeader和DataGridCell。1)创建上述2部分的ControlTemplate 。2)把其中的ContentPresenter改为TextBlock3)使用TextTrimming属性xaml code like this: SnapsToDevicePix原创 2013-07-10 15:44:46 · 1439 阅读 · 0 评论 -
TreeView控件实践
TreeView控件可以通过HierarchicalDataTemplate 和 DataTemplate来自定义。1)HierarchicalDataTemplate用来支持HeaderedItemsControl,其中DataType指定当前的数据类型, 只有符合这个类型才使用HierarchicalDataTemplate;ItemsSource用来指定ItemsHost;内部的自定义实现(原创 2013-07-10 15:44:48 · 1020 阅读 · 0 评论 -
WPF如何更改系统控件的默认高亮颜色 (Highlight brush)
我们在用WPF时, 经常会对系统控件的默认高亮等等颜色进行更改。以前通常是用controlTemplate来实现。 今天发现一个更合理或者简单的方法:用系统默认颜色的key, 比如SystemColors.HighlightBrushKey此资源可以动态引用和改变。而SystemColors.HighlightBrush只能用于静态资源。example:Button Backgr原创 2013-07-10 15:44:51 · 4614 阅读 · 0 评论 -
WPF中Xaml编译正常而Designer Time时出错的解决办法
开发wpf时我们经常遇到一个xaml文件在设计时显示解析错误(比如在:VS或者Blend)而编译正常运行正常。原因是:xaml的在Debug版本下必须为anyCPU。解决办法:1.打开工程文件xxx.csproj, 2.找到含有 Debug的PropertyGroup节点3.将此PropertyGroup节点中的改为anyCPU。示例:原创 2013-07-18 10:36:31 · 1666 阅读 · 0 评论 -
TreeView的性能问题
最近在帮同事调试一个类似资源管理器的wpf界面,左边TreeView去遍历大目录时UI卡死,刚开始我以为是在UI线程中调用系统API遍历目录的原因,就改为后台遍历,但是没有效果。根本原因:TreeView的Style中Template对于ScrollViewer的CanContentScroll设置为FALSE, 导致VirtualizingStackPanel的虚拟化失效原创 2014-04-16 13:36:43 · 3492 阅读 · 0 评论 -
Xaml中string(字符串)常量的定义以及空格的处理
(1)基本用法xaml中可以实例化各种对象,比如在ResourceDictionary中定义字符串常量:ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x ="http://schemas.microsoft.com/win原创 2014-06-14 10:30:20 · 8277 阅读 · 0 评论 -
WPF中PreviewMouseDownEvent的系统处理:TabItem的PreviewMouseDown 事件弹框后不切换的问题调查
背景:UI中有一个TabControl, 包含2个TabItem,当切换到别的TabItem时可能弹框然后根据逻辑判断是否跳转过去。然后我就做了这样一个demo:xaml:UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x ="http://schemas.mic原创 2015-07-07 22:44:10 · 3924 阅读 · 0 评论 -
WPF错误:必须使“Property”具有非 null 值。
这个问题一般出现在Triggers中Property指定的类型为Nullable。解决办法就是用DataTrigger代替Trigger, 然后用Binding+Converter转换为具体非Null值。比如:原创 2014-10-09 14:28:09 · 4160 阅读 · 0 评论 -
WPF中的CheckBox的_ (underscore / 下划线)丢失
今天在项目中遇到check box的Content的内容缺少'_', 原因是WPF的ContentPresenter默认会把‘_’作为加速键的转义字符。 比如CheckBox的content为“_IsEnable”, 实际结果:显示为“IsEnable”; 当你按键“i”时,会触发Click事件,就可以快速的选中或者取消选中。如果想要显示‘_’, 可以将控件内部的ContentPresenter的原创 2014-09-04 13:29:18 · 3346 阅读 · 0 评论 -
依赖属性
Q:什么时候会用到DP?A:当你需要支持样式,数据绑定,动画, Blend设计器等Q:DP与CLR属性不同的关键点有?A:Static,GetValue/SetValue (DependencyObject), Dependency, 时间换空间Q:DP的值优先级是?A:属性系统强制转换>动画>本地值>触发器>Setter>继承>依赖属性元数据的默认值Q:DP的优势?A:继承,减少内存占用空间,变原创 2014-09-04 13:19:10 · 1220 阅读 · 0 评论 -
WPF中ToolTip的自定义
ToolTip或者PopUp这个控件在做界面时会经常用到。如何对ToolTip进行自定义呢?1.首先自定义tooltip的controlTemplate,完全清除系统默认效果, 如下:2.自定义tooltip的contentTemplate, 这样可以专注于tooltip的界面呈现, 而不关心tooltip要显示的字符串, 如下:3.应用Tooltip的style,如下: <ButtonContent ="TestButton"> < Button.Too原创 2014-02-18 12:12:14 · 18385 阅读 · 0 评论 -
聊聊“现在学习MFC有用吗?”
我用MFC做了4年多,后来转到WPF也做了快5年。对于二者,不敢说精通,但应该算入门。结合自己经历,如果不考虑项目需求,我认为新手学习WPF或许更好点。有3点:1)大家都知道最近几年Motorola,Nokia,Kodak等等都没落了。 原因有很多,其中有一点应该是当时老技术还能继续获取高额利润,对新技术投入不足。放到职场上, VC现在是还有好多行业在用,但是这些行业的代码大部分是维护原创 2013-11-22 11:14:46 · 12935 阅读 · 21 评论 -
MFC中调用WPF教程
呵呵, 这几天看到社区里大家对如何在vc中调用WPF兴致很高, 现在我就带领大家按部就班来实现它.废话不说了, 开始. WPF是微软主推的新一代桌面程序开发技术, 它极大加快了程序界面开发,也增强了界面的用户体验,至于详细的介绍大家可以google, 本文主要还是介绍如何在vc中处理wpf数据和事件.开发工具嘛vs2008+sp1+[Blend]. 1.新建一个项目MFCHostWpf, 建立原创 2010-05-07 00:07:00 · 27588 阅读 · 102 评论 -
Bambook 稍后阅读 V1.01 发布
当遇到感兴趣的文章,又因为手头工作或是周围环境而不能马上阅读,那么点一下 Read It Later,该文章便被自动列入了待阅读(Unread)列表。简单轻量,减少信息焦虑,让你更专注于当前的操作。此程序可将Read It Later用户的阅读文章列表及内容生成SNB文件, 并传输到Bambook。 下载地址: http://u.115.com/file/f0325bde42 欢迎大家试用, 有什么问题请联系我:jgli_2008@sina.com原创 2011-02-12 13:25:00 · 1050 阅读 · 0 评论 -
Evernote 锦书生成器 V1.04 发布
EverNote可以帮助你记住生活中的大小事务,并通过计算机、手机、网页进行访问。 1.用你的手机给名片拍张快照,就可以方便的保存和查找。 2.保存机票,验证码,酒店账单,您的收支详情。 3.规划您的下一次旅行。截取网页,地图和路线。拍摄风光,声音,小吃,你旅行中的所见所闻。 4.通过你的浏览器迅速调阅网站和网页摘抄。 。。。。。。。。。。。。。。。。。。。。此处省略300字。 通过EverNote锦书生成器, 你可以把EverNote强大的功能与锦书结合起来,原创 2011-02-12 13:22:00 · 1654 阅读 · 0 评论 -
Expression Blend操作: 使用behavior来控制Storyboard
Blend是WPF/SL开发人员的利器, 你可以在美工板上绘制形状、路径和控件,然后修改其外观和行为,你也可以导入图像、视频和声音等等。 今天我给大家演示如何用Blend中提供的ControlStoryboardAction行为来控制Storyboard(情节提要)。环境为Blend3+win7. 1.打开Blend, 创建wpf工程,默认为WpfApplication1. 如下图: 2.利用Blend创建一个简单的动画 1>首先把Blend的工作区选为“动画”, 切换快捷键为F6,原创 2010-06-22 14:50:00 · 3238 阅读 · 2 评论 -
WPF: 一个可以用StoryBoard动态改变Grid行宽/列高的类
今天, 我给大家讲解如何用C#动态改变grid容器的行宽或者列高.WPF的Storyboard真的很强大, 尤其是和blend 3配和后就更容易了, 但是呢仔细看下Grid的width/height的数据类型是GridLength, 也就是说不是普通的Int, Double, Boolean, Char, Byte, Color, Point类型, 而wpf也没有给我们提供一个GridLength原创 2010-04-18 17:25:00 · 5015 阅读 · 8 评论 -
win32与WPF的混合编程
本文主要讲的是win32程序中如何应用WPF界面1.WPF概述 WPF缩写为Windows Presentation Foundation的缩写 ,其原来代号为“Avalon”,因“我佩服”拼音首字母组合一样,国内有人调侃地称之为“我佩服”。WPF是微软新一代图形系统,运行在.NET Framework 3.0架构下,为用户界面、2D/3D 图形、文档和媒体提供原创 2009-12-14 09:44:00 · 4147 阅读 · 9 评论