Язык

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 для кнопки , содержащей одну сетку. Он также содержит VisualStateGroup называется CommonStates, который определяет состояния PointerOver и Normal. Кроме того, в VisualStateGroupVisualTransition указывается, что для 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.

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

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

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

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

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

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

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

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

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

Имя Описание
VisualStateGroup()

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

Свойства

Имя Описание
CurrentState

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

Dispatcher

Всегда возвращается null в приложении пакета SDK для приложений windows. Вместо этого используйте 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

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

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

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