谈谈Silverlight 2中的视觉状态管理 Part1
2008-10-09 11:40:15 来源:WEB开发网
从上表中我们可以看到,对于CheckBox控件来说,它有三个状态组:FocusStates、CommonStates、CheckStates。一个CheckBox控件可以同时为Focused、MouseOver和Indeterminate状态,因为它们处在不同的状态组。现在对于这个问题:“CheckBox控件的状态是什么?”答案应该由三部分组成,分别为三个状态组中的一个。状态组是在Silverlight 2中提出的一个新的概念,它由VisualStateGroup类来提供,其中除了状态组名属性外,维护了一个视觉状态的集合和一个状态迁移的集合,如下代码所示:
public sealed class VisualStateGroup : DependencyObject
{
public VisualStateGroup();
public string Name { get; }
public Collection<VisualState> States { get; set; }
public Collection<VisualTransition> Transitions { get; set; }
}
使用状态组是一个非常棒的模型,在Beta 1中,CheckBox控件有12种状态(其中Focus在Beta 1中是作为部件而不是状态),这12种状态是通过CommonStates和CheckStates组合而成的,如PressedUnchecked、MouseOverChecked等,而在Beta 2中,加上FocusStates状态,CheckBox控件总共只有10种状态。
控件的状态和状态组是通过TemplateVisualState特性来声明的,如在CheckBox控件中的声明如下代码所示:
[TemplateVisualStateAttribute(Name = "ContentFocused", GroupName = "FocusStates")]
视觉状态管理器
[TemplateVisualStateAttribute(Name = "MouseOver", GroupName = "CommonStates")]
[TemplateVisualStateAttribute(Name = "Focused", GroupName = "FocusStates")]
[TemplateVisualStateAttribute(Name = "Checked", GroupName = "CheckStates")]
[TemplateVisualStateAttribute(Name = "Unchecked", GroupName = "CheckStates")]
[TemplateVisualStateAttribute(Name = "Indeterminate", GroupName = "CheckStates")]
[TemplateVisualStateAttribute(Name = "Pressed", GroupName = "CommonStates")]
[TemplateVisualStateAttribute(Name = "Disabled", GroupName = "CommonStates")]
[TemplateVisualStateAttribute(Name = "Unfocused", GroupName = "FocusStates")]
[TemplateVisualStateAttribute(Name = "Normal", GroupName = "CommonStates")]
public class CheckBox : ToggleButton
{
// ......
}
我们再来看一下视觉状态管理器的概念,有了上面这些概念,在Silverlight 2中视觉状态管理是通过视觉状态管理器(Visual State Manager)来进行的,Silverlight 2中提供了VisualStateManager类,如下所示:
public class VisualStateManager : DependencyObject
{
public static DependencyProperty CustomVisualStateManagerProperty;
public VisualStateManager();
public static VisualStateManager GetCustomVisualStateManager(DependencyObject obj);
public static Collection<VisualStateGroup> GetVisualStateGroups(DependencyObject obj);
public static bool GoToState(Control control, string stateName, bool useTransitions);
protected virtual bool GoToStateCore(Control control, FrameworkElement templateRoot,
string stateName, VisualStateGroup group, VisualState state, bool useTransitions);
public static void SetCustomVisualStateManager(DependencyObject obj,
VisualStateManager value);
}
视觉状态管理器负责管理控件的状态和状态组以及状态的迁移。
状态变化
外部事件触发将会引起状态的变化,进而引发状态迁移,整个过程如下流程图所示:
总结
本文介绍了Silverlight 2中视觉状态管理的一些基本概念,下篇文章,我们将结合实例看看如何使用视觉状态管理来定制控件的观感。
Tags:谈谈 Silverlight 视觉
编辑录入:爽爽 [复制链接] [打 印]- ››silverlight全屏显示图片
- ››Silverlight MVVM 模式(一) 切近实战
- ››视觉和交互设计实例:3D社区游戏QQ阳光牧场
- ››谈谈我在Admin5写软文一年来的经验心得
- ››谈谈团购网容易进入的几个误区
- ››谈谈如何做好团购导航网站 让IP轻松过5万
- ››谈谈我的软文思维 关键在于“软文链轮”
- ››谈谈框架集网站优化方案
- ››Silverlight for Windows Phone 7开发系列(1):...
- ››Silverlight for Windows Phone 7开发系列(2):...
- ››Silverlight for Windows Phone 7开发系列(3):...
- ››Silverlight for Windows Phone 7开发系列(4):...
更多精彩
赞助商链接