VisualStateManager 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
管理状态和在控件状态之间转换的逻辑。
public ref class VisualStateManager : System::Windows::DependencyObject
public class VisualStateManager : System.Windows.DependencyObject
type VisualStateManager = class
inherit DependencyObject
Public Class VisualStateManager
Inherits DependencyObject
- 继承
示例
以下示例创建一个 Rectangle,并将名为 CommonStates
的 VisualStateGroup 添加到 VisualStateManager.VisualStatesGroups
附加属性。 该示例定义 CommonStates
VisualStateGroup中的 MouseOver
和 Normal
VisualState 对象。 当用户将鼠标指针移到 Rectangle上时,它会在半秒内从红色变为绿色。 当用户将鼠标移离矩形时,Grid 会立即变为红色。 请注意,Normal
状态未定义 Storyboard。 不需要 Storyboard,因为当 Rectangle 从 MouseOver
状态转换为 Normal
状态时,MouseOver
的 Storyboard 将停止,SolidColorBrush 的 Color 属性将返回红色。
<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 执行适当启动和停止与相关状态关联的情节提要所需的逻辑。 例如,假设控件定义了状态、State1
和 State2
,每个状态都有与之关联的情节提要。 如果控件处于 State1
并且将 State2
传递给 GoToState 或 GoToElementState,则 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 对象的集合。 |