Поделиться через


VisualTransition Класс

Определение

Представляет визуальное поведение, возникающее при переходе элемента управления из одного визуального состояния в другое.

/// [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>
Наследование
Object IInspectable DependencyObject VisualTransition
Атрибуты

Требования к 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 — это поведение, инициирующее раскадровку. Эта раскадровка представляет собой временная шкала, которая объявляет продолжительность выполнения анимаций, которые переходят между двумя визуальными состояниями. Переход можно определить по-разному для каждой комбинации начального состояния (состояние From ) и конечного состояния (состояние To ) в соответствии с набором визуальных состояний элемента управления. Переходы определяются свойством Transitionsобъекта VisualStateGroup и обычно определяются в XAML. Большинство шаблонов элементов управления по умолчанию не определяют переходы, и в этом случае переходы между состояниями происходят мгновенно. Изменения старого состояния в шаблоне удаляются, а изменения нового состояния применяются.

VisualTransition ссылается на одно или два именованных визуальных состояния. Значение From ссылается на имя состояния, которое является текущим состоянием. Значение To ссылается на имя состояния, которое является новым состоянием, запрошенным вызовом GoToState . Эти имена происходят из строкового значения атрибута x:Name , которое применяется к VisualState как часть его определения в той же группе VisualStateGroup. Значение From или To являются обязательным значением для действующего элемента VisualTransition. VisualTransition, в котором отсутствуют эти значения или используются значения, которые не соответствуют существующим состояниям, ничего не делает.

VisualTransition может ссылаться только на состояние From , только на состояние To или на состояния From и To . Пропуск параметра From или To приравнивается к любому состоянию. VisualStateManager использует логику приоритета, для которой переход применяется при каждом изменении визуальных состояний:

  1. Если существует VisualTransition, который ссылается на старое состояние From и новое состояние как На, используйте этот переход.
  2. В противном случае, если существует VisualTransition, который ссылается на новое состояние как На , но не указывает From, используйте этот переход.
  3. Наконец, если существует visualTransition, которая ссылается на старое состояние как From , но не указывает На, используйте этот переход. Если ни одно из описанных выше действий не применяется, переход не выполняется.

При вызове GoToState для изменения визуального состояния элемента управления VisualStateManager выполняет следующие действия:

  • Если visualState , который использовался элементом управления до запрошенного визуального состояния, имеет раскадровка, эта раскадровка останавливается.
  • Между этими действиями выполняется раскадровка для VisualTransition, если существует переход, который включает два визуальных состояния, и именованное визуальное состояние, запрошенное GoToState, является допустимым и является новым состоянием.
  • Если visualState с именем stateName имеет раскадровку, раскадровка начинается.

VisualTransition может иметь значение Раскадровки , Значение GeneratedDuration или и то, и другое. Но если VisualTransition не имеет ни значения Storyboard , ни значения GeneratedDuration , то VisualTransition ничего не делает с точки зрения анимации, даже если состояния, именованные значениями From и To , участвуют в изменении состояния.

Неявные переходы

Вы можете определить VisualTransition таким образом, чтобы он был создан, но не имеет конкретных свойств зависимостей, предназначенных и анимированных. Это создает неявный переход. Любое свойство зависимостей, специально предназначенное для анимации в визуальных состояниях From или To и, таким образом, имеет разные значения в изменении состояния, затем использует созданную анимацию перехода. Эта созданная анимация переходит между значением состояния From и значением состояния To такого свойства с помощью интерполяции. Анимация неявного перехода длится в течение времени, указанного в GeneratedDuration.

Неявные переходы применяются только к свойствам, которые являются значением Double, Color или Point . Другими словами, свойство должно быть возможно для неявной анимации с помощью DoubleAnimation, PointAnimation или ColorAnimation. Если вы хотите создать анимацию перехода для другого значения, например значения, для которого требуется ObjectAnimationUsingKeyFrames, поместите эту анимацию в раскадровку и присвойте анимации значение Duration , которое вы хотите запустить.

По умолчанию анимация неявного перехода использует линейную интерполяцию для анимации значения с помощью GeneratedDuration. Вы можете изменить линейную интерполяцию на поведение интерполяции по своему выбору, задав GeneratedEasingFunction и GeneratedDuration в VisualTransition.

Анимация перехода

Существует еще один шаблон проектирования и API для отображения визуальных переходов для приложения UWP с помощью C++, C# или Visual Basic. Эта концепция называется анимацией перехода , а класс, реализующий поведение, является переходом темы или анимацией темы. Вместо того, чтобы объявлять переходы между визуальными состояниями одного элемента управления и применять изменения к свойствам элементов управления, как в визуальных состояниях, анимация перехода представляет изменения в связи между полным элементом пользовательского интерфейса и общим приложением и пользовательским интерфейсом. Например, существует repositionThemeTransition , который может применяться при каждом перемещении элемента пользовательского интерфейса в пространстве координат пользовательского интерфейса контейнера макета. Многие анимации перехода инициируются действием пользователя. Анимация перехода применяется к различным свойствам переходаUIElement и определенным производным классам, а не к 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 представляет средство, которое может получить доступ к DependencyObject в потоке пользовательского интерфейса, даже если код инициируется потоком, не относящегося к пользовательскому интерфейсу.

(Унаследовано от DependencyObject)
From

Возвращает или задает имя Объекта VisualState для перехода.

GeneratedDuration

Возвращает или задает время, необходимое для перехода из одного состояния в другое, а также время, в течение которого анимация неявного перехода должна выполняться как часть поведения перехода.

GeneratedEasingFunction

Возвращает или задает функцию плавности, применяемую к созданным анимациям.

Storyboard

Возвращает или задает раскадровку , которая выполняется при переходе.

To

Возвращает или задает имя объекта VisualState , на который необходимо перейти.

Методы

ClearValue(DependencyProperty)

Очищает локальное значение свойства зависимостей.

(Унаследовано от DependencyObject)
GetAnimationBaseValue(DependencyProperty)

Возвращает любое базовое значение, установленное для свойства зависимостей, которое применяется в случаях, когда анимация не активна.

(Унаследовано от DependencyObject)
GetValue(DependencyProperty)

Возвращает текущее действующее значение свойства зависимостей из DependencyObject.

(Унаследовано от DependencyObject)
ReadLocalValue(DependencyProperty)

Возвращает локальное значение свойства зависимостей, если задано локальное значение.

(Унаследовано от DependencyObject)
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

Регистрирует функцию уведомления для прослушивания изменений определенной DependencyProperty в этом экземпляре DependencyObject .

(Унаследовано от DependencyObject)
SetValue(DependencyProperty, Object)

Задает локальное значение свойства зависимостей для Объекта DependencyObject.

(Унаследовано от DependencyObject)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

Отменяет уведомление об изменениях, которое было ранее зарегистрировано путем вызова метода RegisterPropertyChangedCallback.

(Унаследовано от DependencyObject)

Применяется к

См. также раздел