UI前沿技术

“流畅 UI”这个词最近常被用来形容一种 UI 设计技术,这种技术能够避免 让可视化对象突然进入视野或者从一个位置跳到另一个位置。流畅的可视化对象 在进入视野和变换位置时更加优雅,有时就像从雾中浮现或者滑入视野。

我在本专栏的前两篇文章中介绍过一些您自己实现流畅 UI 的技术,当时的 部分灵感就来源于 Silverlight 4 中即将推出的流畅 UI 功能。现在, Silverlight 4 已经正式发布,本文就为您介绍其功能。Silverlight 4 中流畅 UI 的使用范围很窄,只用于加载和卸载 ListBox 中的项,但是却能给我们一些 重要的启发,告诉我们如何在自己的实现中扩展流畅 UI 技术。Expression Blend 4 中具备更多的流畅 UI 行为。

模板和 VSM

如果您不知道新的流畅 UI 功能究竟在 Silverlight 4 的什么地方,您可能 需要花几个小时去寻找。它不是类;不是属性;不是方法;也不是事件。实际上 ,它是 ListBoxItem 类上的三个新的视觉状态。图 1 显示了这个类的文档,其 中的 TemplateVisualState 属性项进行了微调,以符合组的名称。

图 1 ListBoxItem 类文档

[TemplateVisualStateAttribute(Name = "Normal", GroupName  =
  "CommonStates")]
[TemplateVisualStateAttribute(Name = "MouseOver", GroupName  =
  "CommonStates")]
[TemplateVisualStateAttribute(Name = "Disabled", GroupName =
  "CommonStates")]
[TemplateVisualStateAttribute(Name = "Unselected", GroupName  =
  "SelectionStates")]
[TemplateVisualStateAttribute(Name = "Selected", GroupName =
  "SelectionStates")]
[TemplateVisualStateAttribute(Name = "SelectedUnfocused",  GroupName =
  "SelectionStates")]
[TemplateVisualStateAttribute(Name = "Unfocused", GroupName  =
  "FocusStates")]
[TemplateVisualStateAttribute(Name = "Focused", GroupName =
  "FocusStates")]
[TemplateVisualStateAttribute(Name = "BeforeLoaded", GroupName  =
  "LayoutStates")]
[TemplateVisualStateAttribute(Name = "AfterLoaded", GroupName  =
  "LayoutStates")]
[TemplateVisualStateAttribute(Name = "BeforeUnloaded", GroupName  =
  "LayoutStates")]
public class ListBoxItem : ContentControl

视觉状态管理器 (VSM) 是 Silverlight 中最重要的更改之一,它改编自 Windows Presentation Foundation。在 WPF 中,样式或模板(几乎总是用 XAML 定义)可以包含名为触发器 的元素。这些触发器被定义为检测属性更改或 检测事件,然后启动一段动画或更改另一个属性。

例如,一个控件的样式定义可以包含一个针对 IsMouseOver 属性的触发器, 当该属性为 True 时,触发器将控件的背景设置为蓝色画笔。也可以定义针对 MouseEnter 和 MouseLeave 事件的触发器,当这些事件发生时可以启动几段简 短的动画。

在 Silverlight 中,大部分触发器都被弃用,取而代之的是 VSM。这么做的 部分原因是希望提供更加结构化的方法,以便在运行时动态更改控件的特征;还 有部分原因是避免在定义多个触发器后,处理各种可能的组合。 VSM 被认为是 对触发器的极大改进,因此包含在 Microsoft .NET Framework 4 的 WPF 中。

您从图 1 可以看到,ListBoxItem 控件支持 11 种视觉状态,这些状态被分 为四组。在每一组中,任意时刻只能有一种视觉状态是活动的。这一简单的规则 极大地减少了可能的组合数量。例如,您无需去思考当鼠标悬停在已选定但未聚 焦的项上时,ListBoxItem 该如何显示;而且每个组都可以独立于其他组进行处 理。

ListBoxItem 的代码部分通过调用静态的 VisualStateManager.GoToState 方法,来负责更改视觉状态。ListBoxItem 的控件模板负责响应这些视觉状态。 模板使用一个情节提要来响应特定的视觉状态,该情节提要中包含一个或多个以 可视化树中的元素为目标的动画。如果您希望控件立即响应视觉状态的更改而不 使用动画,只需将动画的持续时间定义为 0 即可。但为什么要这么麻烦呢?可 以像使用动画一样,轻松地让控件的视觉效果更流畅。

支持流畅 UI 的新视觉状态分别是 BeforeLoaded、AfterLoaded 和 BeforeUnloaded,它们都包含在 LayoutStates 组中。通过将动画关联到这些视 觉状态,您可以让 ListBox 中的项在第一次加入 ListBox 时淡入或滑入视野, 而从 ListBox 删除时呈现一些别的效果。

时间: 2024-08-22 15:16:18

UI前沿技术的相关文章

MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件

原文  MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件 UI 前沿技术 WPF 中的多点触控操作事件 Charles Petzold 下载代码示例 就在过去几年,多点触控还只是科幻电影中表现未来主义的一种重要手法,现在俨然已经成为主流的用户界面技术. 多点触控显示屏现在成了新型智能手机和 Tablet 计算机的标准显示屏. 此外,它还可能在公共场所的计算机上普及,例如 Microsoft Surface 率先开发的网亭或桌面计算机. 实际存在的唯一不确定因素是多点触控在常规台式

UI前沿技术-WPF中的多点触控操作事件

就在过去几年,多点触控还只是科幻电影中表现未来主义的一种重要手法,现在俨然已经成为主流的用户界面技术.多点触控显示屏现在成了新型智能手机和 Tablet 计算机的标准显示屏.此外,它还可能在公共场所的计算机上普及,例如 Microsoft Surface 率先开发的网亭或桌面计算机. 实际存在的唯一不确定因素是多点触控在常规台式计算机上的普及.这种普及的最大障碍或许是长时间在垂直屏幕上移动手指所产生的疲劳(称为"大猩猩手臂").我个人希望多点触控的强大功能将切实推进桌面显示屏的重新设计

UI前沿技术: 不局限于网格

画布是 Windows Presentation Foundation (WPF) 和 Silverlight 中提供的若干布局选项之一,它是其中与传统布局传承最为紧密的.在使用子元素填充画布时,通过使用 Canvas.Left 和 Canvas.Top 附加属性指定坐标可以定位每个子元素.此模式与其他面板有显著区别,其他面板是基于简单的算法来布置子元素的,无需程序员指出实际位置. 听到"画布"一词时,您可能会想到绘图和绘画.因此,使用 WPF 和 Silverlight 的程序员可能

UI前沿技术:XNA颜色滚动程序

导读:在2011年1月的MSDN杂志中,MSDN长期特约编辑Charles Petzold发表了一篇有关"XNA颜色滚动程序"的文章 全文如下 我最早编写并发布的 Windows 程序之一名为 COLORSCR("颜色滚动程序"),发表在本杂志的前身 Microsoft Systems Journal 的 1987 年 5 月号中. 很多年过去了,我时常发现针对其他 API 和框架重写此程序很有意义. 尽管这个程序很简单(操控红.绿.蓝三种颜色值对应的滚动条或滑块来

UI前沿技术-无需进行数学运算的投影转换

几乎在任何图形系统中,转换都是最重要的功能,但它事实上并未参与绘制.转换的作用是利用数学公式(通常以矩阵乘法的形式表示 )来修改坐标,从而改变可视对象的外观. Silverlight 从其出现开始一直采用由 UIElement 定义的 RenderTransform 属性,而此前,该属性一直在 Windows Presentation Foundation (WPF) 中应用.由于该属性是由 UIElement 定义的,因此,您可以将其用于图形对象.文本.控件和媒体.只需将 RenderTran

UI前沿技术 – WPF应用程序中的MIDI音乐

每一台 PC 都包含一个内置的 16 人乐队,可播放一些音乐.人们不容易注意此乐队的成员,因为它 们表示的可能是 Windows 所支持的声音和视频功能阵列中利用最不充分的组件. 此 16 人乐队是在符合 MIDI(乐器数字接口)标准的硬件或软件中实现的电子音乐合成器.在 Win32 API 中,以单词 midiOut 开头的函数支持使用 MIDI 合成器播放音乐. MIDI 支持不是 .NET Framework 的一部分,但如果要在 Windows 窗体或 Windows Presentat

基于jTemplates、ascx协同工作的酷UI模板技术

在很久很久以前,也就是asp.net ajax刚引起大众关注不久,asp.net ajax团队成员ScottGu发布 了一篇非常实用的文章: 英文:Tip/Trick: Cool UI Templating Technique to use with ASP.NET AJAX for non-UpdatePanel scenarios , 中文:技巧和诀窍:在不用UpdatePanel的情形下可与ASP.NET AJAX 使用的酷UI模板技术 看完之后,非常受用,并给我留下了非常深刻的映像,之后

百度工程师高校开课传授网络前沿技术

7月11日,由百度与中科院研究生院.北京航空航天大学联合开设的<Web前沿技术系列讲座>结业课在百度"搜索框"大厦举行.来自上述两所院 校100余名学生代表对学期作业进行了分组演示,百度web前端研发部架构师黄方荣.高校课程组织方代表中科院研究生院齐洪钢博士出席结业课并对同学们 作业进行了现场点评.这也是国内首个由互联网企业技术专家参与教学的普及Web前沿知识的高校学分课程. 据悉,此次面向中科院研究生院.北京航空航天大学所开设的Web前端技术系列课程时长一个月,包括百度首

阿里巴巴创新研究计划正式发布 面向全球招募前沿技术合作者

阿里巴巴创新研究计划,简称AIR(Alibaba Innovative Research)近日正式对外发布,该计划是阿里巴巴集团发布NASA计划以来,为探索科技创新设立的首个全球性科研项目,聚焦技术驱动未来. AIR致力于推进计算机科学领域基础性.前瞻性.突破性的研究,以校企深度合作的方式引领重大科技创新的实践应用,构建技术生态.研究计划官网同时上线.诚邀全球学术机构或非盈利性实验室的学者们参与到AIR计划中来. 此次发布的AIR覆盖了包括自然语言处理.机器学习.计算平台等14个前沿技术领域的.