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
. 中的CommonStates
VisualStateGroup对象和Normal
VisualState对象。 当用户将鼠标指针移到鼠标指针上方 Rectangle时,它会在半秒内从红色更改为绿色。 当用户将鼠标从矩形移开时, Grid 立即变为红色。 请注意, Normal
状态未定义 Storyboard。 不需要 AStoryboard,因为当从MouseOver
状态转换到Normal
状态时Rectangle,Storyboard将停止该状态MouseOver
,并将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 在按下时,它的外观可能与未按下时略有不同。 定义 Button 对应于按下 () "Pressed"
和未 ("Normal"
) 时的两种状态。 控件处于状态时的外观由 a VisualState. 一 VisualState 个包含一个 Storyboard 对象集合,这些对象指定控件处于该状态时控件的外观变化方式。 通过在控件上设置 VisualStateManager.VisualStateGroups
附加属性,向控件添加视觉状态。 每个 VisualStateGroup 对象都包含互斥的对象集合 VisualState 。 也就是说,控件始终处于每个 VisualStateGroup状态的一个状态。
此外 VisualStateManager ,还可以指定控件何时进入特定状态。 应调用更改状态的方法取决于你的方案。 如果创建使用该控件的VisualStateManagerControlTemplate控件,请调用GoToState该方法。 有关如何创建使用该 VisualStateManager控件的控件的详细信息,请参阅 创建具有可自定义外观的控件。 例如,如果使用VisualStateManager (外部ControlTemplate,如果在UserControlVisualStateManager单个元素中使用或单个元素) ,请调用GoToElementState该方法。 在这两种情况下,执行 VisualStateManager 适当启动和停止与所涉及的状态关联的情节提要所需的逻辑。 例如,假设控件定义了状态, State1
每个 State2
控件都有与之关联的情节提要。 如果控件处于传入State1
状态,或者传入或GoToElementState传入GoToStateState2
,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 |
获取包装 DependencyObjectType 此实例的 CLR 类型。 (继承自 DependencyObject) |
Dispatcher |
获取与此 Dispatcher 关联的 DispatcherObject。 (继承自 DispatcherObject) |
IsSealed |
获取一个值,该值指示此实例当前是否为密封的(只读)。 (继承自 DependencyObject) |
附加属性
CustomVisualStateManager |
获取或设置在控件的状态间转换的 VisualStateManager 对象。 |
VisualStateGroups |
获取或设置 VisualStateGroup 对象的集合。 |