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>
- Наследование
- Атрибуты
Примеры
В этом примере создается простой элемент 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 будет активным:
- Настраиваемый триггер, производный от StateTriggerBase
- АдаптивныйTrigger активирован из-за MinWindowWidth
- АдаптивныйTrigger активирован из-за MinWindowHeight
Если во время оценки существует несколько активных триггеров с конфликтом в оценке (т. е. два активных пользовательских триггера), то первый, объявленный в файле разметки, имеет приоритет.
Примечание. Хотя AdaptiveTrigger является производным от StateTriggerBase, его можно активировать только с помощью параметра MinWindowWidth и/или MinWindowHeight.
Visualstategroup API, поддерживающий пользовательскую реализацию VisualStateManager
Многие API существуют только для поддержки пользовательской VisualStateGroup реализации VisualStateManager . К ним относятся: Name, CurrentState, CurrentStateChanging, CurrentStateChanged. Наиболее распространенные виды использования визуальных состояний для шаблонов элементов управления не требуются этим API. В частности, это не обычно для обработки событий. Большинство операций логики для элемента управления должны включать собственные свойства и события. В большинстве сценариев определения приложений и элементов управления изменения визуального состояния, которые происходят с элементом управления, должны быть только конечным результатом логики, которая применяется к его шаблону, а не триггеру для другой логики.
Конструкторы
| Имя | Описание |
|---|---|
| VisualStateGroup() |
Инициализирует новый экземпляр класса VisualStateGroup . |
Свойства
| Имя | Описание |
|---|---|
| CurrentState |
Возвращает последний набор VisualState из успешного вызова метода GoToState . |
| Dispatcher |
Всегда возвращается |
| DispatcherQueue |
Возвращает, |
| 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 |
Происходит, когда элемент управления начинает переходить в другое состояние. |