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>
- Наследование
- Атрибуты
Требования к 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 будут активны:
- Настраиваемый триггер, производный от 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 |
Возвращает 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 |
Происходит, когда элемент управления начинает переходить в другое состояние. |