技术开发 频道

Silverlight 2中的视觉状态管理第二部分

   在引用VisualStateManager之前,需要先引入命名空间,这是Silverlight 2 Beta 2的一个已知Bug。如下代码所示:
 

xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"


   接下来我们定义视觉状态组,在上篇文章中我们就介绍过CheckBox的状态组,总共有三个:FocusStates、CommonStates、CheckStates,这里我们只定义CommonStates和CheckStates状态组,大家可以自行定义FocusStates状态组,如下代码所示:
 

<vsm:VisualStateManager.VisualStateGroups>

<!-- CommonStates StateGroup-->
<vsm:VisualStateGroup x:Name="CommonStates">
</vsm:VisualStateGroup>


<!-- CheckStates StateGroup-->
<vsm:VisualStateGroup x:Name="CheckStates">
</vsm:VisualStateGroup>

</vsm:VisualStateManager.VisualStateGroups>
 


   这里需要为每个视觉状态组指定名称,且名称是固定的。

定义视觉状态

   现在我们添加视觉状态到状态组,在CommonStates和CheckStates状态组中,总共有7个状态,如下表所示:




   首先我们来定义CommonStates状态组,代码如下所示:
 

<!-- CommonStates StateGroup-->
<vsm:VisualStateGroup x:Name="CommonStates">
<!-- Normal State -->
<vsm:VisualState x:Name="Normal">
</vsm:VisualState>

<!-- MouseOver State -->
<vsm:VisualState x:Name="MouseOver">
<Storyboard>
<DoubleAnimation/>
</Storyboard>
</vsm:VisualState>

<!-- Pressed State -->
<vsm:VisualState x:Name="Pressed">
<Storyboard>
<DoubleAnimation/>
</Storyboard>
</vsm:VisualState>

<!-- Disabled State -->
<vsm:VisualState x:Name="Disabled">
<Storyboard>
<DoubleAnimation/>
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>


对于每一个视觉状态,主要有两部分组成:

   一是命名:我们需要为视觉状态指定一个名称,且名称为固定的,这样VisualStateManager才能够找到相应的状态;
   二是故事板:指定状态变化时的视觉呈现。

   现在我们来实现每一个状态,对于Normal状态,不用作任何定义,因为它的定义与控件的基础状态一致,如下代码所示:
 

<!-- Normal State -->
<vsm:VisualState x:Name="Normal">
</vsm:VisualState>
0
相关文章