VisualStateManager 类

定义

管理状态和在控件状态之间转换的逻辑。

public ref class VisualStateManager : System::Windows::DependencyObject
public class VisualStateManager : System.Windows.DependencyObject
type VisualStateManager = class
    inherit DependencyObject
Public Class VisualStateManager
Inherits DependencyObject
继承

示例

以下示例创建一个 Rectangle,并将名为 CommonStatesVisualStateGroup 添加到 VisualStateManager.VisualStatesGroups 附加属性。 该示例定义 CommonStatesVisualStateGroup中的 MouseOverNormalVisualState 对象。 当用户将鼠标指针移到 Rectangle上时,它会在半秒内从红色变为绿色。 当用户将鼠标移离矩形时,Grid 会立即变为红色。 请注意,Normal 状态未定义 Storyboard。 不需要 Storyboard,因为当 RectangleMouseOver 状态转换为 Normal 状态时,MouseOverStoryboard 将停止,SolidColorBrushColor 属性将返回红色。

<Rectangle Name="rect" 
           Width="100" Height="100"
           MouseEnter="rect_MouseEvent" 
           MouseLeave="rect_MouseEvent">
  <VisualStateManager.VisualStateGroups>
    <VisualStateGroup Name="MouseStates">
      <VisualState Name="MouseEnter">
        <Storyboard>
          <ColorAnimation To="Green" 
                          Storyboard.TargetName="rectBrush" 
                          Storyboard.TargetProperty="Color"/>
        </Storyboard>
      </VisualState>
      <VisualState Name="MouseLeave" />
      <VisualStateGroup.Transitions>
        <VisualTransition To="MouseLeave" GeneratedDuration="00:00:00"/>

        <VisualTransition To="MouseEnter" GeneratedDuration="00:00:00.5">
          <VisualTransition.GeneratedEasingFunction>
            <ExponentialEase EasingMode="EaseOut" Exponent="10"/>
          </VisualTransition.GeneratedEasingFunction>
        </VisualTransition>

      </VisualStateGroup.Transitions>
    </VisualStateGroup>
  </VisualStateManager.VisualStateGroups>

  <Rectangle.Fill>
    <SolidColorBrush x:Name="rectBrush" Color="Red"/>
  </Rectangle.Fill>
</Rectangle>

下面的示例演示在上一示例中定义的事件处理程序,并调用 GoToElementState 方法在状态之间转换。 如果上一示例中的矩形是 ControlTemplate的一部分,则此示例必须调用 GoToState 方法。

private void rect_MouseEvent(object sender, MouseEventArgs e)
{
    if (rect.IsMouseOver)
    {
        VisualStateManager.GoToElementState(rect, "MouseEnter", true);
    }
    else
    {
        VisualStateManager.GoToElementState(rect, "MouseLeave", true);
    }
}
Private Sub rect_MouseEvent(ByVal sender As Object, ByVal e As MouseEventArgs)
    If rect.IsMouseOver Then
        VisualStateManager.GoToElementState(rect, "MouseEnter", True)
    Else
        VisualStateManager.GoToElementState(rect, "MouseLeave", True)
    End If
End Sub

注解

VisualStateManager 使你可以指定控件的状态、控件处于特定状态时的外观以及控件更改状态时。 例如,当按下 Button 时,其外观可能与未按下时略有不同。 两种状态,即 Button 定义对应于按下时("Pressed")和未按下("Normal")。 控件处于状态时的外观由 VisualState定义。 VisualState 包含一组 Storyboard 对象,这些对象指定控件处于该状态时控件的外观更改方式。 通过在控件上设置 VisualStateManager.VisualStateGroups 附加属性,向控件添加视觉状态。 每个 VisualStateGroup 都包含一组互斥的 VisualState 对象。 也就是说,控件始终在每个 VisualStateGroup中完全处于一种状态。

使用 VisualStateManager 还可以指定控件何时进入特定状态。 应调用更改状态的方法取决于你的方案。 如果创建在其 ControlTemplate中使用 VisualStateManager 的控件,请调用 GoToState 方法。 有关如何创建使用 VisualStateManager的控件的详细信息,请参阅 创建具有可自定义外观的控件。 如果在 ControlTemplate 外部使用 VisualStateManager(例如,如果在 UserControl 或单个元素中使用 VisualStateManager),请调用 GoToElementState 方法。 在任一情况下,VisualStateManager 执行适当启动和停止与相关状态关联的情节提要所需的逻辑。 例如,假设控件定义了状态、State1State2,每个状态都有与之关联的情节提要。 如果控件处于 State1 并且将 State2 传递给 GoToStateGoToElementState,则 VisualStateManager 会在 State2 中启动情节提要,并在 State1中停止情节提要。

Windows Presentation Foundation(WPF)附带的控件使用 VisualStateManager 更改视觉状态。 为 WPF 附带的控件创建 ControlTemplate 时,可以将 VisualState 对象添加到控件的 ControlTemplate,以指定控件在某种状态下的外观。 若要查找 WPF 附带的控件的视觉状态的名称,请参阅 控件样式和模板。 控件的逻辑处理状态之间的转换,因此无需执行除在新 ControlTemplate中定义 VisualState 对象以外的任何操作。 有关如何为现有控件创建控件模板的详细信息,请参阅 通过创建 ControlTemplate自定义现有控件的外观。

如果要实现自己的逻辑以在状态之间转换,则必须继承自 VisualStateManager,重写 GoToStateCore 方法,并在使用自定义逻辑的控件上设置 VisualStateManager.CustomVisualStateManager 附加属性。

构造函数

VisualStateManager()

初始化 VisualStateManager 类的新实例。

字段

CustomVisualStateManagerProperty

标识 CustomVisualStateManager 依赖属性。

VisualStateGroupsProperty

标识 VisualStateGroups 依赖属性。

属性

DependencyObjectType

获取包装此实例的 CLR 类型的 DependencyObjectType

(继承自 DependencyObject)
Dispatcher

获取与此 DispatcherObject 关联的 Dispatcher

(继承自 DispatcherObject)
IsSealed

获取一个值,该值指示此实例当前是否密封(只读)。

(继承自 DependencyObject)

附加属性

CustomVisualStateManager

获取或设置在控件状态之间转换的 VisualStateManager 对象。

VisualStateGroups

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

方法

CheckAccess()

确定调用线程是否有权访问此 DispatcherObject

(继承自 DispatcherObject)
ClearValue(DependencyProperty)

清除属性的本地值。 要清除的属性由 DependencyProperty 标识符指定。

(继承自 DependencyObject)
ClearValue(DependencyPropertyKey)

清除只读属性的本地值。 要清除的属性由 DependencyPropertyKey指定。

(继承自 DependencyObject)
CoerceValue(DependencyProperty)

强制指定依赖属性的值。 这是通过在调用 DependencyObject上调用依赖属性的属性元数据中指定的任何 CoerceValueCallback 函数来实现的。

(继承自 DependencyObject)
Equals(Object)

确定提供的 DependencyObject 是否等效于当前 DependencyObject

(继承自 DependencyObject)
GetCustomVisualStateManager(FrameworkElement)

获取 CustomVisualStateManager 附加属性。

GetHashCode()

获取此 DependencyObject的哈希代码。

(继承自 DependencyObject)
GetLocalValueEnumerator()

创建一个专用枚举器,用于确定哪些依赖项属性在此 DependencyObject上具有本地设置的值。

(继承自 DependencyObject)
GetType()

获取当前实例的 Type

(继承自 Object)
GetValue(DependencyProperty)

返回此 DependencyObject实例上的依赖属性的当前有效值。

(继承自 DependencyObject)
GetVisualStateGroups(FrameworkElement)

获取 VisualStateGroups 附加属性。

GoToElementState(FrameworkElement, String, Boolean)

转换两种状态之间的元素。 使用此方法转换由应用程序定义的状态,而不是由控件定义。

GoToState(FrameworkElement, String, Boolean)

转换两种状态之间的控件。 使用此方法转换具有 ControlTemplate控件的状态。

GoToStateCore(FrameworkElement, FrameworkElement, String, VisualStateGroup, VisualState, Boolean)

在状态之间转换控件。

InvalidateProperty(DependencyProperty)

重新评估指定依赖属性的有效值。

(继承自 DependencyObject)
MemberwiseClone()

创建当前 Object的浅表副本。

(继承自 Object)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

每当更新此 DependencyObject 上任何依赖属性的有效值时调用。 在事件数据中报告更改的特定依赖属性。

(继承自 DependencyObject)
RaiseCurrentStateChanged(VisualStateGroup, VisualState, VisualState, FrameworkElement, FrameworkElement)

对指定的 VisualStateGroup 对象引发 CurrentStateChanging 事件。

RaiseCurrentStateChanging(VisualStateGroup, VisualState, VisualState, FrameworkElement, FrameworkElement)

对指定的 VisualStateGroup 对象引发 CurrentStateChanging 事件。

ReadLocalValue(DependencyProperty)

返回依赖属性的本地值(如果存在)。

(继承自 DependencyObject)
SetCurrentValue(DependencyProperty, Object)

设置依赖项属性的值,而不更改其值源。

(继承自 DependencyObject)
SetCustomVisualStateManager(FrameworkElement, VisualStateManager)

设置 CustomVisualStateManager 附加属性。

SetValue(DependencyProperty, Object)

设置依赖属性的本地值,由依赖属性标识符指定。

(继承自 DependencyObject)
SetValue(DependencyPropertyKey, Object)

设置由依赖属性的 DependencyPropertyKey 标识符指定的只读依赖属性的本地值。

(继承自 DependencyObject)
ShouldSerializeProperty(DependencyProperty)

返回一个值,该值指示序列化进程是否应序列化所提供的依赖属性的值。

(继承自 DependencyObject)
ToString()

返回一个表示当前对象的字符串。

(继承自 Object)
VerifyAccess()

强制调用线程有权访问此 DispatcherObject

(继承自 DispatcherObject)

适用于