VisualStateGroup 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
包含互斥的 VisualState 对象和用于从一种状态转移到另一种状态的 VisualTransition 对象。
public ref class VisualStateGroup : System::Windows::DependencyObject
[System.Windows.Markup.ContentProperty("States")]
[System.Windows.Markup.RuntimeNameProperty("Name")]
public class VisualStateGroup : System.Windows.DependencyObject
[<System.Windows.Markup.ContentProperty("States")>]
[<System.Windows.Markup.RuntimeNameProperty("Name")>]
type VisualStateGroup = class
inherit DependencyObject
Public Class VisualStateGroup
Inherits DependencyObject
- 继承
- 属性
示例
以下示例为 Button 包含一个 的简单 ControlTemplate 创建一个 Grid。 它还包含一CommonStates
个名为 VisualStateGroup 的 ,用于定义 MouseOver
和 Normal
状态。
VisualStateGroup还有一个 ,VisualTransition它指定当用户将鼠标指针移到 上Button时,需要半秒的时间才能Grid将 从绿色更改为红色。
<ControlTemplate TargetType="Button">
<Grid >
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualStateGroup.Transitions>
<!--Take one half second to trasition to the MouseOver state.-->
<VisualTransition To="MouseOver"
GeneratedDuration="0:0:0.5"/>
</VisualStateGroup.Transitions>
<VisualState x:Name="Normal" />
<!--Change the SolidColorBrush, ButtonBrush, to red when the
mouse is over the button.-->
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimation Storyboard.TargetName="ButtonBrush"
Storyboard.TargetProperty="Color" To="Red" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid.Background>
<SolidColorBrush x:Name="ButtonBrush" Color="Green"/>
</Grid.Background>
</Grid>
</ControlTemplate>
注解
每个都包含 VisualStateGroup 对象的集合 VisualState 。 包含 VisualState 对象的集合 Storyboard ,这些对象指定控件处于特定状态时控件外观的变化方式。 例如, Button 按下 时的外观可能与未按下时略有不同。 定义的两种状态 Button 对应于何时按下 () "Pressed"
和未 ("Normal"
) 。
通过在控件上设置VisualStateManager.VisualStateGroups
附加属性,可以添加到VisualState控件。 将相互排斥的状态置于同一个 VisualStateGroup中。 例如, CheckBox 有两个 VisualStateGroup 对象。 一个包含状态、 Normal
、 MouseOver
、 Pressed
和 Disabled
。 另一个包含状态、 Checked
UnChecked
和 Indeterminate
。
CheckBox可以同时处于 状态MouseOver
,UnChecked
但不能同时处于 MouseOver
和 Pressed
状态。
尽管可以将 对象添加到 VisualState 任何元素,但它们是一种特别有用的方法,使其他人能够重新定义 的视觉行为 Control。 如果创建使用 ControlTemplate的自定义控件,可以通过在其类定义上添加 来 TemplateVisualStateAttribute 指定控件可以处于哪些状态。 然后,为控件创建新 ControlTemplate 控件的任何人都可以将对象添加到 VisualState 模板。 使 TemplateVisualStateAttribute 设计器工具(如 Visual Studio 和 Blend for Visual Studio)能够公开控件的状态。 具有相同的状态 TemplateVisualStateAttribute.GroupName 属于同一 VisualStateGroup个 。
有关如何在 中使用 VisualStateGroupControlTemplate对象的详细信息,请参阅 通过创建 ControlTemplate 自定义现有控件的外观。 有关如何创建使用 的 VisualStateManager控件的详细信息,请参阅 创建具有可自定义外观的控件。
属性 Transitions 包含 VisualTransition 当控件在 中 VisualStateGroup定义的状态之间转换时应用的对象。
构造函数
VisualStateGroup() |
初始化 VisualStateGroup 类的新实例。 |
属性
CurrentState |
获取当前应用到该控件的 VisualState。 |
DependencyObjectType |
DependencyObjectType获取包装此实例的 CLR 类型的 。 (继承自 DependencyObject) |
Dispatcher |
获取与此 Dispatcher 关联的 DispatcherObject。 (继承自 DispatcherObject) |
IsSealed |
获取一个值,该值指示此实例当前是否为密封的(只读)。 (继承自 DependencyObject) |
Name |
获取或设置 VisualStateGroup 的名称。 |
States |
获取互斥 VisualState 对象的集合。 |
Transitions |
获取 VisualTransition 对象的集合。 |
方法
事件
CurrentStateChanged |
在控件转换为其他状态后发生。 |
CurrentStateChanging |
在控件开始向其他状态转换时发生。 |