VisualTransition 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示控件从一种视觉状态转换到另一种视觉状态时发生的视觉行为。
/// [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="Storyboard")]
class VisualTransition : 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="Storyboard")]
public class VisualTransition : DependencyObject
Public Class VisualTransition
Inherits DependencyObject
<VisualStateGroup>
<!--one or more Visual State elements in the implicit States collection property -->
<VisualStateGroup.Transitions>
<VisualTransition>
singleStoryboard
</VisualTransition>
<!--more transitions as above-->
</VisualStateGroup.Transitions>
</VisualStateGroup>
- 继承
- 属性
Windows 要求
设备系列 |
Windows 10 (在 10.0.10240.0 中引入)
|
API contract |
Windows.Foundation.UniversalApiContract (在 v1.0 中引入)
|
示例
此示例创建一个 VisualTransition,它指定当用户将鼠标移开控件时,控件的边框在 1.5 秒内变为蓝色、黄色、黑色。
<!--Take one and a half seconds to transition from the
PointerOver state to the Normal state.
Have the SolidColorBrush, BorderBrush, fade to blue,
then to yellow, and then to black in that time.-->
<VisualTransition From="PointerOver" To="Normal"
GeneratedDuration="0:0:1.5">
<Storyboard>
<ColorAnimationUsingKeyFrames
Storyboard.TargetProperty="Color"
Storyboard.TargetName="BorderBrush"
FillBehavior="HoldEnd" >
<ColorAnimationUsingKeyFrames.KeyFrames>
<LinearColorKeyFrame Value="Blue"
KeyTime="0:0:0.5" />
<LinearColorKeyFrame Value="Yellow"
KeyTime="0:0:1" />
<LinearColorKeyFrame Value="Black"
KeyTime="0:0:1.5" />
</ColorAnimationUsingKeyFrames.KeyFrames>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualTransition>
<VisualStateGroup x:Name="CommonStates">
<!--Define the VisualTransitions that can be used when the control
transitions between VisualStates that are defined in the
VisualStatGroup.-->
<VisualStateGroup.Transitions>
<!--Take one hundredth of a second to transition to the
Pressed state.-->
<VisualTransition To="Pressed"
GeneratedDuration="0:0:0.01" />
<!--Take one half second to transition to the PointerOver state.-->
<VisualTransition To="PointerOver"
GeneratedDuration="0:0:0.5" />
<!--Take one hundredth of a second to transition from the
Pressed state to the PointerOver state.-->
<VisualTransition From="Pressed" To="PointerOver"
GeneratedDuration="0:0:0.01" />
<!--Take one and a half seconds to transition from the
PointerOver state to the Normal state.
Have the SolidColorBrush, BorderBrush, fade to blue,
then to yellow, and then to black in that time.-->
<VisualTransition From="PointerOver" To="Normal"
GeneratedDuration="0:0:1.5">
<Storyboard>
<ColorAnimationUsingKeyFrames
Storyboard.TargetProperty="Color"
Storyboard.TargetName="BorderBrush"
FillBehavior="HoldEnd" >
<ColorAnimationUsingKeyFrames.KeyFrames>
<LinearColorKeyFrame Value="Blue"
KeyTime="0:0:0.5" />
<LinearColorKeyFrame Value="Yellow"
KeyTime="0:0:1" />
<LinearColorKeyFrame Value="Black"
KeyTime="0:0:1.5" />
</ColorAnimationUsingKeyFrames.KeyFrames>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualTransition>
</VisualStateGroup.Transitions>
<!--The remainder of the VisualStateGroup is the
same as the previous example.-->
<VisualState x:Name="Normal" />
<VisualState x:Name="PointerOver">
<Storyboard>
<ColorAnimation Storyboard.TargetName="BorderBrush"
Storyboard.TargetProperty="Color" To="Red" />
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard >
<ColorAnimation Storyboard.TargetName="BorderBrush"
Storyboard.TargetProperty="Color" To="Transparent"/>
</Storyboard>
</VisualState>
<!--The Disabled state is omitted for brevity.-->
</VisualStateGroup>
注解
VisualTransition 是一种启动 情节提要的行为。 此情节提要是一个时间线,用于声明在两个视觉状态之间切换的动画将运行的持续时间。 根据控件的一组视觉状态) 定义的起始状态 (“从 状态) ”和结束 (状态) ,可以以不同的方式定义转换。 转换由 VisualStateGroup 的 Transitions 属性定义,通常在 XAML 中定义。 大多数默认控件模板不定义转换,在这种情况下,状态之间的转换会立即发生。 将删除旧状态对模板的修改,并应用新状态的修改。
VisualTransition 引用一个或两个命名视觉状态。 From 值引用当前状态的状态的名称。 To 值引用状态的名称,该状态是 GoToState 调用请求的新状态。 这些名称来自同一 VisualStateGroup 中作为 VisualState 定义的一部分应用于 VisualState 的x:Name 特性字符串值。 From 或 To 是有效 VisualTransition 的必需值,缺少这些值之一或使用与现有状态不匹配的值的 VisualTransition 不执行任何操作。
VisualTransition 只能引用 “发件人 ”状态、“ 到 ”状态,也可以同时引用 “发件人 ”和“ 到” 状态。 省略 From 或 To 等于任何状态。 VisualStateManager 使用优先逻辑,每当视觉状态发生更改时,将对其应用转换:
- 如果存在专门引用旧状态为 From 且新状态为 To 的 VisualTransition,请使用该转换。
- 否则,如果存在专门引用新状态为 “To ”但未指定 “发件人”的 VisualTransition,请使用该转换。
- 最后,如果存在专门引用旧状态为 “发件人 ”但未指定 “到”的 VisualTransition,请使用该转换。 如果上述任一项均不适用,则不会运行转换。
调用 GoToState 更改控件的可视状态时, VisualStateManager 将执行以下操作:
- 如果控件在新请求的视觉状态之前使用的 VisualState 具有 Storyboard,该情节提要将停止。
- 在这些操作之间,如果存在涉及两种视觉状态的转换,并且 GoToState 请求的命名视觉状态有效且为新状态,则 VisualTransition 的 Storyboard 将运行。
- 如果由 stateName 命名的 VisualState 具有 Storyboard,则情节提要开始。
VisualTransition 可以具有 Storyboard 值和/或 GeneratedDuration 值。 但是,如果 VisualTransition 既没有 Storyboard 值也没有 GeneratedDuration 值,则 VisualTransition 在动画方面不执行任何操作,即使状态更改涉及 由 From 和 To 值命名的状态。
隐式转换
可以定义 VisualTransition,使其具有 GeneratedDuration,但没有任何特定的依赖属性作为目标并对其进行动画处理。 这会创建隐式转换。 在 “从 ”或“ 到 ”视觉状态中专门针对动画的任何依赖属性,因此在状态更改中具有不同的值,然后使用生成的过渡动画。 此生成的动画在此类属性的 From 状态值和 To 状态值之间使用内插转换。 隐式过渡动画的持续时间为 GeneratedDuration 所述时间。
隐式转换仅适用于 双精度值、 颜色 值或 点 值的属性。 换句话说,属性必须能够使用 DoubleAnimation、PointAnimation 或 ColorAnimation 进行隐式动画处理。 如果要对其他某个值(例如需要 ObjectAnimationUsingKeyFrames 的值)创建过渡动画,请将该动画放入 Storyboard 中,并为动画提供要运行的 持续时间 。
默认情况下,隐式过渡动画使用线性内插通过 GeneratedDuration 对值进行动画处理。 可以通过在 VisualTransition 上设置 GeneratedEasingFunction 和 GeneratedDuration ,将线性内插更改为所选的内插行为。
过渡动画
还有另一种设计模式和 API,用于使用 C++、C# 或 Visual Basic 显示 UWP 应用的视觉转换。 此概念称为 过渡动画 ,实现该行为的类是 主题切换 或 主题动画。 过渡动画表示整个 UI 元素与整个应用和 UI 之间的关系的变化,而不是像使用视觉状态那样声明同一控件的视觉状态之间的切换和对控件部件的属性应用更改。 例如,每当 UI 元素在其布局容器的 UI 坐标空间中移动时,都可以应用 RepositionThemeTransition 。 许多过渡动画都是由用户操作启动的。 过渡动画适用于 UIElement 的各种 Transition 属性和特定的派生类,而不是 VisualStateGroup。 过渡动画和主题动画通常内置于控件的默认行为中。 有关详细信息,请参阅视觉状态的情节提要动画。
以前版本的说明
Windows 8.x
对于Windows 8,动画库中的 XAML 主题切换和其他各种自动动画行为不符合特定的 Microsoft Windows 轻松访问设置,该设置使用户能够关闭“不必要的动画”。
从Windows 8.1开始,主题切换、主题动画和视觉过渡都遵循“尽可能关闭所有不必要的动画 (”) “轻松访问”中的设置。 动画不会运行,并且控件状态更改或视觉更改是即时的。
如果将应用代码从Windows 8迁移到Windows 8.1,则可能需要在启用) 设置的情况下关闭所有不必要的动画 ( 来测试动画行为。 由于其中一些动画由情节提要控制,并且有时将自定义动画链接起来,在视觉过渡或主题动画完成后启动,因此 “在可能的情况下关闭所有不必要的动画 () 设置可能会影响动画的计时。 此外,如果你已在视觉状态(而不是情节提要动画)中将某些内容实现为 VisualTransition,则可能需要将其切换为真正的自定义动画,以便 “尽可能关闭所有不必要的动画 () 设置不会禁用它。
为Windows 8编译但在Windows 8.1上运行的应用继续使用主题动画和视觉转换的Windows 8行为。 但是,即使未重新编译应用,Windows 8.1上的设置也会禁用主题切换。
构造函数
VisualTransition() |
初始化 VisualTransition 类的新实例。 |
属性
Dispatcher |
获取与此对象关联的 CoreDispatcher 。 CoreDispatcher 表示可以访问 UI 线程上的 DependencyObject 的工具,即使代码是由非 UI 线程启动的。 (继承自 DependencyObject) |
From |
获取或设置要从中转换的 VisualState 的名称。 |
GeneratedDuration |
获取或设置从一种状态移动到另一种状态所需的时间,以及任何隐式过渡动画应作为过渡行为的一部分运行的时间。 |
GeneratedEasingFunction |
获取或设置应用于生成的动画的缓动函数。 |
Storyboard |
获取或设置在转换发生时运行的 情节提要 。 |
To |
获取或设置要转换到的 VisualState 的名称。 |
方法
ClearValue(DependencyProperty) |
清除依赖属性的本地值。 (继承自 DependencyObject) |
GetAnimationBaseValue(DependencyProperty) |
返回为依赖属性建立的任何基值,该基值适用于动画未处于活动状态的情况。 (继承自 DependencyObject) |
GetValue(DependencyProperty) |
从 DependencyObject 返回依赖属性的当前有效值。 (继承自 DependencyObject) |
ReadLocalValue(DependencyProperty) |
如果设置了本地值,则返回依赖属性的本地值。 (继承自 DependencyObject) |
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback) |
注册通知函数,用于侦听此 DependencyObject 实例上对特定 DependencyProperty 的更改。 (继承自 DependencyObject) |
SetValue(DependencyProperty, Object) |
设置 DependencyObject 上依赖属性的本地值。 (继承自 DependencyObject) |
UnregisterPropertyChangedCallback(DependencyProperty, Int64) |
取消以前通过调用 RegisterPropertyChangedCallback 注册的更改通知。 (继承自 DependencyObject) |