响应式UI提示
本文关键字:提示 UI 响应 | 更新日期: 2023-09-27 18:12:51
当我想创建一个响应式UI时,我只想要一些提示。
我知道如何使用:
Dispatcher
Task
BackgroundWorker
Threads
我正在寻找更多的高级技巧,比如装订技巧。。。当我的UI上有50多个控件需要更新时。
PriorityBinding
Populating ComboBoxes
Populating ListBoxes, ListViews
在后台处理数据时。。。最佳实践可能涉及到长期过程。
我还能做些什么来使我的UI 100%响应。
-
FastObservableCollection
-
操作演示文稿源
-
通过使用在多个线程上使用PLinq或LinqAsQueryable((用于动态筛选数据源,而不是单线程和线程无关的
CollectionView
。 -
动画上的现成礼品
-
画布等非虚拟化面板的Vitalization
-
延迟滚动
-
触发器。输入''退出动画操作。
-
BeginStoryboard.HandoffBehavior="编写">
-
使用硬件而非软件加速。
-
避免
WindowStyle=None
、AllowTransparency=true
、Background=Transparent
、TileMode
-
将
RenderOptions.BitmpaScalingMode
配置为低质量并启用缓存。启用PresentationFontCache
窗口服务。 -
在
Dynamicresources
上使用Staticresources
-
避免可继承的依赖属性。还要避免在属性更改回调中执行繁重的操作。
-
使用可冻结笔刷。避免
x:Name
/Namescoping
/Binding
的Color
属性使它们始终是可冻结的。 -
设置边框的背景,如果它封装了视觉效果,则要设置视觉效果的背景。类似的情况是,如果将
Brush
设置为视觉的背景,则指定Brush.Opacity
而不是Visual.Opacity
。 -
值转换器必须具有最小代码。在适用的情况下使用
Binding.IsAsync
和PriorityBinding
。 -
默认情况下,将
Expanders
与IsExpanded=False
一起使用。 -
CompositionTarget.Rendering
在每个渲染循环中都会激发,因此只有在需要时才应使用。抓住任何机会。 -
WPF
DataGrid
应避免大量使用组合框列和可编辑模板列,因为组合框模板在与高度可观察的集合一起使用时,会尝试加载选定的值,并通过从每个组合框和模板列泄漏的项源实际搜索来使用显示成员路径。 -
使用基于WPF扩展Tooklit的着色器效果和新像素着色器API例如模糊、阴影。
还有更多。。。
我总是发现延迟加载非常有助于防止一次加载大量数据,而这正是处理大量数据时大部分启动时间的所在。将您的记录绑定到虚拟项目控件,以最大限度地减少内存占用(显然,WPF是您对内存中必要内容的判断(。
但说实话:马丁说得很对。。。50多个数据绑定控件,。。。伙计,那简直是地狱;-(
我想,你对100%响应能力的追求需要进一步的解释。据我所知,应用程序可以响应也可以不响应(接受用户输入/产生输出,而不是什么都不做(。你们的目标是取得最好的成绩吗?还是您所面临的行锁定场景(让用户在对某些记录执行长任务的同时编辑其他记录(?
我认为AngelWPF提到的一些内容可以在这篇关于优先级绑定的文章中找到。
单个UI上的50多个控件听起来像是由程序员设计的,优化代码可能会在一段时间内解决真正的问题。加快速度的最好方法是将您的功能分离到不同的屏幕上,或者将较少使用的信息隐藏在菜单后面。