VisualStateGroup 类

定义

包含用于从一个状态到另一个状态的互斥 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>
继承
Object IInspectable DependencyObject VisualStateGroup
属性

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触发器将处于活动状态:

  1. 派生自的自定义触发器 StateTriggerBase
  2. AdaptiveTrigger 已激活 MinWindowWidth
  3. AdaptiveTrigger 已激活 MinWindowHeight

如果一次有多个活动触发器在评分 (存在冲突,即两个活动自定义触发器) ,则标记文件中声明的第一个触发器优先。

注意:虽然 AdaptiveTrigger 确实派生自 StateTriggerBase,但它只能通过设置 MinWindowWidth 和/或 MinWindowHeight激活。

VisualStateGroup 支持自定义 VisualStateManager 实现的 API

VisualStateGroup 的许多 API 仅支持自定义 VisualStateManager 实现。 其中包括:Name、、CurrentStateCurrentStateChangingCurrentStateChanged。 控件模板的视觉状态的最常见用法不需要这些 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 APIWindows 应用 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命名空间) 。

方法

ClearValue(DependencyProperty)

清除依赖属性的本地值。

适用于 UWP 的等效 WinUI 2 API:Windows 应用 SDK中 WinUI 的 Microsoft.UI.Xaml.DependencyObject.ClearValue (,请参阅Windows 应用 SDK命名空间) 。

(继承自 DependencyObject)
GetAnimationBaseValue(DependencyProperty)

返回为依赖属性建立的任何基值,如果动画不处于活动状态,将适用该基值。

适用于 UWP 的等效 WinUI 2 API:Windows 应用 SDK WinUI 的 Microsoft.UI.Xaml.DependencyObject.GetAnimationBaseValue (,请参阅 Windows 应用 SDK命名空间) 。

(继承自 DependencyObject)
GetValue(DependencyProperty)

Returns the current effective value of a dependency property from a DependencyObject.

适用于 UWP 的等效 WinUI 2 API:Windows 应用 SDK中 WinUI Microsoft.UI.Xaml.DependencyObject.GetValue (,请参阅 Windows 应用 SDK命名空间) 。

(继承自 DependencyObject)
ReadLocalValue(DependencyProperty)

如果设置了本地值,则返回依赖属性的本地值。

适用于 UWP 的等效 WinUI 2 API:Windows 应用 SDK中 WinUI 的 Microsoft.UI.Xaml.DependencyObject.ReadLocalValue (,请参阅Windows 应用 SDK命名空间) 。

(继承自 DependencyObject)
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

注册一个通知函数,用于侦听对此DependencyObject实例的特定DependencyProperty更改。

适用于 UWP 的等效 WinUI 2 API:Windows 应用 SDK中 WinUI 的 Microsoft.UI.Xaml.DependencyObject.RegisterPropertyChangedCallback (,请参阅Windows 应用 SDK命名空间) 。

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

设置依赖属性的 DependencyObject本地值。

适用于 UWP 的等效 WinUI 2 API:Windows 应用 SDK中 WinUI 的 Microsoft.UI.Xaml.DependencyObject.SetValue (,请参阅Windows 应用 SDK命名空间) 。

(继承自 DependencyObject)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

取消以前通过调用 RegisterPropertyChangedCallback注册的更改通知。

适用于 UWP 的等效 WinUI 2 API:Windows 应用 SDK中 WinUI 的 Microsoft.UI.Xaml.DependencyObject.UnregisterPropertyChangedCallback (,请参阅Windows 应用 SDK命名空间) 。

(继承自 DependencyObject)

事件

CurrentStateChanged

在控件更改为其他状态后发生。

适用于 UWP 的等效 WinUI 2 API:Windows 应用 SDK中 WinUI 的 Microsoft.UI.Xaml.Xaml.VisualStateGroup.CurrentStateChanged (,请参阅) Windows 应用 SDK命名空间

CurrentStateChanging

当控件开始更改为其他状态时发生。

适用于 UWP 的等效 WinUI 2 APIMicrosoft.UI.Xaml.VisualStateGroup.CurrentStateChanging (for WinUI in Windows 应用 SDK ,请参阅) Windows 应用 SDK命名空间

适用于

另请参阅