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 для элемента 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
в наборе в шаблоне элемента управления, должна быть уникальной в этом шаблоне. Однако для разных элементов управления часто используются одни и те же имена групп. Например, почти все существующие шаблоны элементов управления имеют со значением VisualStateGroup
x:Name attribute
"CommonStates".
Набор визуальных состояний в каждой группе VisualStateGroup
должен быть взаимоисключающим. Иными словами, элемент управления должен постоянно использовать только одно из визуальных состояний из каждой определенной VisualStateGroup
группы. Всякий раз, когда элемент управления должен находиться одновременно в двух состояниях, убедитесь, что эти два состояния находятся в разных группах. Например, можно одновременно сфокусировать раскрывающийся элемент управления и открыть его раскрывающийся список. При правильном визуальном состоянии у вас будет отдельный VisualStateGroup
для каждого состояния, чтобы оба состояния могли быть активными одновременно. Такие группы могут иметь такие имена, как FocusStates и DropDownStates.
Каждый раз, когда вы определяете VisualStateGroup
, который включает временное поведение раскадровки в одном из его элементов VisualState , убедитесь, что эта группа также содержит секунду VisualState
, которую можно вызвать для отмены предыдущего состояния. Это может быть так же просто, как объявить второй VisualState
без раскадровки вообще, просто атрибут x:Name.
Значение атрибута x:Name, заданное для , VisualStateGroup
не используется для вызова VisualStateManager.GoToState; вместо этого x:Name attribute
используется для VisualStateManager.GoToState
VisualState. Любой пользователь, который использует VisualStateManager.GoToState
, должен знать обо всех доступных группах и состояниях, чтобы каждый вызов правильно переходовал из старых состояний в новые состояния в группе.
Помимо набора элементов VisualState , VisualStateGroup
можно также определить набор элементов VisualTransition , каждый из которых VisualTransition
относится по крайней мере к одному из именованных VisualState
элементов, определенных в группе. В XAML набор VisualState
элементов можно объявить как непосредственные дочерние элементы VisualStateGroup
элемента объекта . Это возможно, так как свойство States , которое является коллекцией визуальных состояний, является свойством содержимого XAML для VisualStateGroup
. В отличие от этого, чтобы задать коллекцию визуальных переходов, необходимо объявить эту коллекцию в элементе свойства VisualStateGroup.Transitions в XAML. Дополнительные сведения о свойствах содержимого XAML см. в руководстве по синтаксису XAML.
При использовании StateTriggers для управления визуальными состояниями обработчик триггеров использует следующие правила очередности для оценки триггеров и определения того, какой триггер и соответствующий VisualState будут активны:
- Настраиваемый триггер, производный от StateTriggerBase
- AdaptiveTrigger активируется из-за MinWindowWidth
- AdaptiveTrigger активируется из-за 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 |
Происходит, когда элемент управления начинает переходить в другое состояние. |