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
- 继承
示例
以下示例创建一个RectangleVisualStateGroup命名CommonStates属性并将其添加到VisualStateManager.VisualStatesGroups附加属性。 该示例定义 MouseOver . 中的CommonStatesVisualStateGroup对象和NormalVisualState对象。 当用户将鼠标指针移到鼠标指针上方 Rectangle时,它会在半秒内从红色变为绿色。 当用户将鼠标从矩形移开时, Grid 立即变为红色。 请注意,状态 Normal 未定义 Storyboard。 不需要 AStoryboard,因为当从MouseOver状态转换到Normal状态时Rectangle,Storyboard将停止 forMouseOver,Color并且返回的属性SolidColorBrush为红色。
<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 当按下时,它的外观可能与未按下时略有不同。 定义对应于按下时("Pressed")和未"Normal"按下时的两种状态Button。 控件处于状态时的外观由 a VisualState. 一 VisualState 个对象集合 Storyboard ,这些对象指定控件处于该状态时控件的外观更改方式。 通过在控件上设置 VisualStateManager.VisualStateGroups 附加属性,向控件添加视觉状态。 每个 VisualStateGroup 对象都包含互斥的对象集合 VisualState 。 也就是说,控件始终处于每个 VisualStateGroup状态的一个状态。
此外 VisualStateManager ,还可以指定控件何时进入特定状态。 应调用更改状态的方法取决于你的方案。 如果创建使用该 VisualStateManager 控件的 ControlTemplate控件,请调用该方法 GoToState 。 有关如何创建使用该 VisualStateManager控件的控件的详细信息,请参阅 创建具有可自定义外观的控件。 如果使用 VisualStateManager 外部( ControlTemplate 例如,如果在 VisualStateManager 一个 UserControl 元素中使用或单个元素中),请调用该方法 GoToElementState 。 在任一情况下,执行 VisualStateManager 适当启动和停止与相关状态关联的情节提要所需的逻辑。 例如,假设控件定义了状态, State1 每个 State2控件都有一个与之关联的情节提要。 如果控件处于传入State1状态,或者传入或GoToElementStateVisualStateManager传入State2GoToState,则启动情节提State2要并停止情节提要。State1
Windows Presentation Foundation(WPF)附带的控件用于 VisualStateManager 更改视觉状态。 为 WPF 附带的控件创建对象ControlTemplate时,可以向控件ControlTemplate添加VisualState对象以指定控件在某个状态下的外观。 若要查找 WPF 附带的控件的视觉状态的名称,请参阅 控件样式和模板。 控件的逻辑处理状态之间的转换,因此无需执行除定义 VisualState 新 ControlTemplate对象以外的任何操作。 有关如何为现有控件创建控件模板的详细信息,请参阅 如何为控件创建模板。
如果要实现自己的逻辑以在状态之间转换,则必须继承 VisualStateManager、重写 GoToStateCore 该方法,并在使用自定义逻辑的控件上设置 VisualStateManager.CustomVisualStateManager 附加属性。
构造函数
| 名称 | 说明 |
|---|---|
| VisualStateManager() |
初始化 VisualStateManager 类的新实例。 |
字段
| 名称 | 说明 |
|---|---|
| CustomVisualStateManagerProperty |
标识 CustomVisualStateManager 依赖属性。 |
| VisualStateGroupsProperty |
标识 VisualStateGroups 依赖属性。 |
属性
| 名称 | 说明 |
|---|---|
| DependencyObjectType |
获取包装 DependencyObjectType 此实例的 CLR 类型。 (继承自 DependencyObject) |
| Dispatcher |
获取与此DispatcherDispatcherObject关联的值。 (继承自 DispatcherObject) |
| IsSealed |
获取一个值,该值指示此实例当前是否密封(只读)。 (继承自 DependencyObject) |
附加属性
| 名称 | 说明 |
|---|---|
| CustomVisualStateManager |
获取或设置 VisualStateManager 在控件状态之间转换的对象。 |
| VisualStateGroups |
获取或设置对象的集合 VisualStateGroup 。 |