VisualStateGroup 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
包含用于从一个状态到另一个状态的互斥 VisualState 对象和 VisualTransition 对象。
适用于 UWP 的等效 WinUI 2 API:Windows 应用 SDK中 WinUI 的 Microsoft.UI.Xaml.Xaml.VisualStateGroup (,请参阅Windows 应用 SDK命名空间) 。
public ref class VisualStateGroup sealed : DependencyObject
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.UI.Xaml.Markup.ContentProperty(Name="States")]
class VisualStateGroup final : DependencyObject
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.UI.Xaml.Markup.ContentProperty(Name="States")]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
class VisualStateGroup final : DependencyObject
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.UI.Xaml.Markup.ContentProperty(Name="States")]
public sealed class VisualStateGroup : DependencyObject
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.UI.Xaml.Markup.ContentProperty(Name="States")]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
public sealed class VisualStateGroup : DependencyObject
Public NotInheritable Class VisualStateGroup
Inherits DependencyObject
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="groupname" ...>
oneOrMoreVisualStates
</VisualStateGroup>
<!--- other peer VisualStateGroup's here ... -->
</VisualStateManager.VisualStateGroups>
- 继承
- 属性
Windows 要求
设备系列 |
Windows 10 (在 10.0.10240.0 中引入)
|
API contract |
Windows.Foundation.UniversalApiContract (在 v1.0 中引入)
|
示例
本示例为包含一Grid个示例的简单ControlTemplateButton方法创建一个。 它还包含一个名为“CommonStates”的 VisualStateGroup,该组定义“PointerOver”和“Normal”状态。 VisualStateGroup 还具有一个VisualTransition值,指定当用户将指针放在指针上方Button时,需要半秒Grid才能将指针从绿色更改为红色。
<ControlTemplate TargetType="Button">
<Grid >
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualStateGroup.Transitions>
<!--Take one half second to transition to the PointerOver state.-->
<VisualTransition To="PointerOver"
GeneratedDuration="0:0:0.5"/>
</VisualStateGroup.Transitions>
<VisualState x:Name="Normal" />
<!--Change the SolidColorBrush, ButtonBrush, to red when the
Pointer is over the button.-->
<VisualState x:Name="PointerOver">
<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>
注解
XAML 中声明的每个 VisualStateGroup 应始终为其设置 x:Name 属性 。 控件模板中 VisualStateGroups 集中使用的每个名称字符串都必须在该模板中是唯一的。 不过,对于不同的控件,通常使用相同的组名称。 例如,几乎所有现有控件模板都有一个 VisualStateGroup,其 x:Name 属性 为“CommonStates”。
每个 VisualStateGroup 中的一组视觉状态应在组中相互排斥。 换句话说,控件应始终使用其每个定义的 VisualStateGroup 组中的视觉状态之一。 只要有一个控件在两个状态中同时进行,请确保两个状态位于不同的组中。 例如,下拉控件可以同时聚焦并打开其下拉控件。 在正确的视觉状态设计中,对于每个状态,你有一个单独的 VisualStateGroup,以便它们一次处于活动状态。 此类组的名称可能类似于“FocusStates”和“DropDownStates”。
每当定义在某个 VisualState 元素中启用临时情节提要行为的 VisualStateGroup 时,请确保该组还包含一个可以调用以取消上一状态的秒 VisualState 。 这可以像声明第二 VisualState 个一 Storyboard 样简单,根本不是 x:Name 属性。
为 VisualStateGroup 设置的 x:Name 属性值不用于调用VisualStateManager.GoToState;而是用于的 VisualStateManager.GoToStatex:Name 属性VisualState。 使用 VisualStateManager.GoToState 的任何人员都应了解可用的所有组和状态,以便每个调用正确从旧状态过渡到组中的新状态。
除了一组 VisualState 元素之外,VisualStateGroup 还可以定义一组 VisualTransition 元素,其中每个 VisualTransition 元素都至少与组中定义的一个命名 VisualState 元素相关。 在 XAML 中,可以将元素集 VisualState 声明为 VisualStateGroup 的即时对象元素子元素。 这是可能的,因为 States 属性是视觉状态的集合,是 VisualStateGroup 的 XAML 内容属性。 相比之下,若要设置视觉转换的集合,必须在 XAML 中的属性元素中 VisualStateGroup.Transitions 声明该集合。 有关 XAML 内容属性的详细信息,请参阅 XAML 语法指南。
使用 StateTriggers 控件视觉状态时,触发器引擎使用以下优先规则对触发器进行评分并确定哪个触发器以及相应的 VisualState触发器将处于活动状态:
- 派生自的自定义触发器 StateTriggerBase
- AdaptiveTrigger 已激活 MinWindowWidth
- AdaptiveTrigger 已激活 MinWindowHeight
如果一次有多个活动触发器在评分 (存在冲突,即两个活动自定义触发器) ,则标记文件中声明的第一个触发器优先。
注意:虽然 AdaptiveTrigger 确实派生自 StateTriggerBase,但它只能通过设置 MinWindowWidth 和/或 MinWindowHeight激活。
VisualStateGroup 支持自定义 VisualStateManager 实现的 API
VisualStateGroup 的许多 API 仅支持自定义 VisualStateManager 实现。 其中包括:Name、、CurrentState、CurrentStateChangingCurrentStateChanged。 控件模板的视觉状态的最常见用法不需要这些 API。 特别是处理事件并不典型。 控件的大多数逻辑操作都应涉及其自己的属性和事件。 对于大多数应用和控制定义方案,发生在控件的视觉状态更改应只是控件应用于其模板的逻辑的结束结果,而不是其他逻辑的触发器。
构造函数
VisualStateGroup() |
初始化 VisualStateGroup 类的新实例。 |
属性
CurrentState |
从成功调用GoToState方法获取最近设置VisualState的方法。 适用于 UWP 的等效 WinUI 2 API:Windows 应用 SDK中 WinUI 的 Microsoft.UI.Xaml.Xaml.VisualStateGroup.CurrentState (,请参阅) Windows 应用 SDK命名空间。 |
Dispatcher |
CoreDispatcher获取与此对象关联的对象。 表示 CoreDispatcher 可以访问 DependencyObject UI 线程上的设施,即使代码由非 UI 线程启动也是如此。 适用于 UWP 的等效 WinUI 2 API:Windows 应用 SDK中 WinUI 的 Microsoft.UI.Xaml.DependencyObject.Dispatcher (,请参阅Windows 应用 SDK命名空间) 。 (继承自 DependencyObject) |
Name |
获取 VisualStateGroup 的名称。 适用于 UWP 的等效 WinUI 2 API:Windows 应用 SDK中 WinUI 的 Microsoft.UI.Xaml.VisualStateGroup.Name (,请参阅 Windows 应用 SDK命名空间) 。 |
States |
获取互斥 VisualState 对象的集合。 适用于 UWP 的等效 WinUI 2 API:Windows 应用 SDK中 WinUI 的 Microsoft.UI.Xaml.Xaml.VisualStateGroup.States (,请参阅Windows 应用 SDK命名空间) 。 |
Transitions |
获取 VisualTransition 对象的集合。 适用于 UWP 的等效 WinUI 2 API:Windows 应用 SDK中 WinUI 的 Microsoft.UI.Xaml.Xaml.VisualStateGroup.Transitions (,请参阅Windows 应用 SDK命名空间) 。 |
方法
事件
CurrentStateChanged |
在控件更改为其他状态后发生。 适用于 UWP 的等效 WinUI 2 API:Windows 应用 SDK中 WinUI 的 Microsoft.UI.Xaml.Xaml.VisualStateGroup.CurrentStateChanged (,请参阅) Windows 应用 SDK命名空间。 |
CurrentStateChanging |
当控件开始更改为其他状态时发生。 适用于 UWP 的等效 WinUI 2 API:Microsoft.UI.Xaml.VisualStateGroup.CurrentStateChanging (for WinUI in Windows 应用 SDK ,请参阅) Windows 应用 SDK命名空间。 |
适用于
另请参阅
反馈
提交和查看相关反馈