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


VisualStateGroup Класс

Определение

Содержит взаимоисключающие объекты VisualState и Объекты VisualTransition , используемые для перехода из одного состояния в другое.

public ref class VisualStateGroup sealed : DependencyObject
/// [Microsoft.UI.Xaml.Markup.ContentProperty(Name="States")]
/// [Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class VisualStateGroup final : DependencyObject
[Microsoft.UI.Xaml.Markup.ContentProperty(Name="States")]
[Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
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 Platform::Object IInspectable DependencyObject VisualStateGroup
Атрибуты

Примеры

В этом примере создается простой элемент ControlTemplate для элемента Button , содержащего один элемент Grid. Он также содержит VisualStateGroup с именем CommonStates, который определяет состояния PointerOver и Normal. Также VisualStateGroup имеет visualTransition , указывающее, что для изменения с зеленого на красный требуется одна половина секунды Grid , когда пользователь наводит указатель на Button.

<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>

Комментарии

Для каждого VisualStateGroup , объявленного в XAML как часть шаблона элемента управления, всегда должен быть задан атрибут x:Name . Каждая строка имени, используемая VisualStateGroups в наборе в шаблоне элемента управления, должна быть уникальной в этом шаблоне. Однако для разных элементов управления часто используются одни и те же имена групп. Например, почти все существующие шаблоны элементов управления имеют со значением VisualStateGroupx:Name attribute "CommonStates".

Набор визуальных состояний в каждой группе VisualStateGroup должен быть взаимоисключающим. Иными словами, элемент управления должен постоянно использовать только одно из визуальных состояний из каждой определенной VisualStateGroup группы. Всякий раз, когда элемент управления должен находиться одновременно в двух состояниях, убедитесь, что эти два состояния находятся в разных группах. Например, можно одновременно сфокусировать раскрывающийся элемент управления и открыть его раскрывающийся список. При правильном визуальном состоянии у вас будет отдельный VisualStateGroup для каждого состояния, чтобы оба состояния могли быть активными одновременно. Такие группы могут иметь такие имена, как FocusStates и DropDownStates.

Каждый раз, когда вы определяете VisualStateGroup , который включает временное поведение раскадровки в одном из его элементов VisualState , убедитесь, что эта группа также содержит секунду VisualState , которую можно вызвать для отмены предыдущего состояния. Это может быть так же просто, как объявить второй VisualState без раскадровки вообще, просто атрибут x:Name.

Значение атрибута x:Name, заданное для , VisualStateGroup не используется для вызова VisualStateManager.GoToState; вместо этого x:Name attribute используется для VisualStateManager.GoToStateVisualState. Любой пользователь, который использует VisualStateManager.GoToState , должен знать обо всех доступных группах и состояниях, чтобы каждый вызов правильно переходовал из старых состояний в новые состояния в группе.

Помимо набора элементов VisualState , VisualStateGroup можно также определить набор элементов VisualTransition , каждый из которых VisualTransition относится по крайней мере к одному из именованных VisualState элементов, определенных в группе. В XAML набор VisualState элементов можно объявить как непосредственные дочерние элементы VisualStateGroupэлемента объекта . Это возможно, так как свойство States , которое является коллекцией визуальных состояний, является свойством содержимого XAML для VisualStateGroup. В отличие от этого, чтобы задать коллекцию визуальных переходов, необходимо объявить эту коллекцию в элементе свойства VisualStateGroup.Transitions в XAML. Дополнительные сведения о свойствах содержимого XAML см. в руководстве по синтаксису XAML.

При использовании StateTriggers для управления визуальными состояниями обработчик триггеров использует следующие правила очередности для оценки триггеров и определения того, какой триггер и соответствующий VisualState будут активны:

  1. Настраиваемый триггер, производный от StateTriggerBase
  2. AdaptiveTrigger активируется из-за MinWindowWidth
  3. AdaptiveTrigger активируется из-за MinWindowHeight

Если одновременно имеется несколько активных триггеров, имеющих конфликт в оценке (т. е. два активных настраиваемых триггера), приоритет имеет первый, объявленный в файле разметки.

Примечание. Хотя AdaptiveTrigger является производным от StateTriggerBase, его можно активировать только с помощью параметра MinWindowWidth и (или ) MinWindowHeight.

Visualstategroup API, поддерживающий пользовательскую реализацию VisualStateManager

Многие API существуют только для поддержки пользовательской VisualStateGroup реализации VisualStateManager . К ним относятся : Name, CurrentState, CurrentStateChanging, CurrentStateChanged. Большинство распространенных визуальных состояний для шаблонов элементов управления не требуют эти API. В частности, это не типично для обработки событий. Большинство логических операций для элемента управления должны включать собственные свойства и события. В большинстве сценариев определения приложений и элементов управления изменения визуального состояния, происходящие с элементом управления, должны быть только конечным результатом логики, применяемой элементом управления к его шаблону, а не триггером для другой логики.

Конструкторы

VisualStateGroup()

Инициализирует новый экземпляр класса VisualStateGroup .

Свойства

CurrentState

Возвращает последний набор VisualState из успешного вызова метода GoToState .

Dispatcher

Всегда возвращается null в приложении Windows App SDK. Вместо этого используйте DispatcherQueue .

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

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

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

Возвращает имя VisualStateGroup.

States

Возвращает коллекцию взаимоисключающих объектов VisualState .

Transitions

Возвращает коллекцию объектов VisualTransition .

Методы

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)

События

CurrentStateChanged

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

CurrentStateChanging

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

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

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