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


VisualStateGroup Класс

Определение

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

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 Platform::Object IInspectable DependencyObject VisualStateGroup
Атрибуты

Требования к Windows

Семейство устройств
Windows 10 (появилось в 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (появилось в v1.0)

Примеры

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

<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 в шаблоне элемента управления, должна быть уникальной в этом шаблоне. Однако для разных элементов управления часто используются одни и те же имена групп. Например, почти все существующие шаблоны элементов управления имеют VisualStateGroup с атрибутом x:Name "CommonStates".

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

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

Значение атрибута x:Name , заданное для VisualStateGroup, не используется для вызова VisualStateManager.GoToState; Вместо этого это атрибут x:Nameобъекта VisualState , который используется для VisualStateManager.GoToState. Любой пользователь, использующий 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

Возвращает CoreDispatcher , с которым связан этот объект. CoreDispatcher представляет средство, которое может получить доступ к 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

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

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

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