博客
关于我
[UWP 自定义控件]了解模板化控件(9):UI指南
阅读量:423 次
发布时间:2019-03-06

本文共 2763 字,大约阅读时间需要 9 分钟。

UWP应用程序中ControlTemplate的优化技巧

在开发UWP应用程序时,ControlTemplate的设计和优化对用户体验至关重要。本文将分享几种实用的优化技巧,帮助开发者更好地设计和优化控件模板。

1. 使用TemplateSettings统一外观

在UWP开发中,TemplateSettings是一种强大的工具,可以帮助开发者在多个ControlTemplate之间统一外观。通过创建特定控件的TemplateSettings类,开发者可以为各个ControlTemplate提供一组默认属性,确保外观的一致性。

例如,HeaderedContentControl可以拥有一个HeaderedContentControlTemplateSettings类,用于设置Header的外边距和字体加粗值。这种方法不仅简化了开发过程,还确保了不同ControlTemplate之间的外观保持一致。

public class HeaderedContentControlTemplateSettings : DependencyObject{    public Thickness HeaderMargin    {        get { return new Thickness(0, 0, 0, 8); }    }    public FontWeight HeaderFontWeight    {        get { return FontWeights.Normal; }    }}

在HeaderedContentControl类中,使用TemplateSettings来获取默认属性:

public HeaderedContentControl(){    this.DefaultStyleKey = typeof(HeaderedContentControl);    TemplateSettings = new HeaderedContentControlTemplateSettings();}public HeaderedContentControlTemplateSettings TemplateSettings { get; }

在ControlTemplate中使用这些属性:

2. 借用附加属性

在开发复杂控件时,借用附加属性可以简化属性设置过程。例如,ScrollViewer控制器拥有许多附加属性,这些属性可以被其他控件使用。

例如,TextBox可以直接设置ScrollViewer的属性,而无需在ControlTemplate中手动添加这些属性。通过借用附加属性,可以避免重复代码,并确保属性一致性。

在ControlTemplate中使用附加属性:

3. 使用Style属性

为了进一步定制控件外观,可以在ControlTemplate中使用Style属性。例如,DateTimeSelector可以定义一个TimePickerStyle属性,让TimePicker绑定到该属性。

public Style TimePickerStyle{    get { return (Style)GetValue(TimePickerStyleProperty); }    set { SetValue(TimePickerStyleProperty, value); }}[StyleTypedProperty(Property = "TimePickerStyle", StyleTargetType = typeof(TimePicker))]

在ControlTemplate中使用Style属性:

4. IsTabStop属性

在UI中使用Tab键导航时,IsTabStop属性非常重要。默认值为True,表示控件可以接收Tab键焦点。如果设置为False,控件将不再接收Tab键焦点。

对于复合型控件(如DateTimeSelector),通常需要将IsTabStop设置为False,以避免焦点导航顺序问题。

在DateTimeSelector类中设置IsTabStop:

public DateTimeSelector(){    IsTabStop = false;}

5. 处理焦点外观

在UWP中,FocusVisual用于显示控件获得焦点时的视觉指示器。默认是一个矩形边框,可以通过FocusVisual属性进行定制。

5.1 FocusVisual

通过设置FocusVisual的属性,可以自定义边框外观:

5.2 IsTemplateFocusTarget

IsTemplateFocusTarget附加属性用于控制FocusVisual的绘制位置。可以在ControlTemplate中设置该属性:

...

5.3 自定义FocusVisual

如果需要完全自定义FocusVisual,可以在ControlTemplate中定义VisualState:

6. 简化ControlTemplate

通过简化ControlTemplate,可以显著提高UI性能。复杂的XAML结构不仅影响性能,还可能导致错误。简洁的ControlTemplate设计通常比系统自带的模板性能更好。

例如,简化的Button ControlTemplate:

7. 缩短过渡动画时间

过渡动画是用户体验的重要组成部分。为了确保操作流畅,过渡动画应控制在1秒以内。根据经验,合理的动画时间应缩短一半。

例如,减少动画到0.5秒以内,以确保用户感受到即时反馈。

8. 符合操作系统的操作习惯

在Windows平台上,遵循操作系统的操作习惯非常重要。例如,OK和Cancel按钮的顺序通常是OK在左,Cancel在右。避免颠倒顺序,以免用户误操作。

9. 符合典型的GUI设计原则

在设计控件时,应遵循常见的GUI设计原则,如对齐、字体和颜色突出主要内容、易于操作等。通过合理的布局和设计,可以提升用户体验。

通过以上优化技巧,可以显著提升UWP应用程序的用户体验和性能。这些技巧不仅适用于新开发,还可以帮助优化现有控件模板。

转载地址:http://spyuz.baihongyu.com/

你可能感兴趣的文章
Nginx配置参数中文说明
查看>>
Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
查看>>
Nginx配置如何一键生成
查看>>
Nginx配置实例-负载均衡实例:平均访问多台服务器
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
查看>>
NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
查看>>
NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
查看>>
NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
查看>>
NIH发布包含10600张CT图像数据库 为AI算法测试铺路
查看>>
NIO ByteBuffer实现原理
查看>>
Nio ByteBuffer组件读写指针切换原理与常用方法
查看>>
NIO Selector实现原理
查看>>
nio 中channel和buffer的基本使用
查看>>
NIO基于UDP协议的网络编程
查看>>
NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
查看>>
Nitrux 3.8 发布!性能全面提升,带来非凡体验
查看>>
NI笔试——大数加法
查看>>