VisualStateManager.VisualStateGroups 附加属性

定义

获取或设置 VisualStateGroup 对象的集合。

see GetVisualStateGroups
see GetVisualStateGroups
see GetVisualStateGroups

示例

以下示例为包含一GridButton实例的简单ControlTemplate方法创建一个。 它还包含一个 VisualStateGroup 命名, CommonStates用于定义 MouseOverNormal 状态。 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" 时的两个状态。

通过在控件上设置VisualStateGroups附加属性来添加到VisualState控件。 将相互排斥的状态放在同一 VisualStateGroup个状态中。 例如,有 CheckBox 两个 VisualStateGroup 对象。 一个包含状态、NormalMouseOver``PressedDisabled。 另一个包含状态、Checked``UnChecked状态和 Indeterminate。 可以CheckBox同时处于状态MouseOver``UnChecked,但它不能同时处于MouseOver状态和Pressed状态。

尽管可以将对象添加到 VisualState 任何元素,但它们是一种特别有用的方法,使其他人能够重新定义对象的 Control视觉行为。 如果创建自定义控件, ControlTemplate则可以通过在其类定义中添加一个 TemplateVisualStateAttribute 状态来指定控件可以处于哪个状态。 然后,为控件创建新 ControlTemplate 对象的任何人都可以将对象添加到 VisualState 模板。 具有相同 System.Windows.TemplateVisualStateAttribute.GroupName 的州属于同一 VisualStateGroup个。

有关如何使用对象的详细信息,请参阅通过创建 ControlTemplate 自定义现有控件的外观ControlTemplateVisualStateGroup 有关如何创建使用该 VisualStateManager控件的详细信息,请参阅 创建具有可自定义外观的控件

适用于