VisualStateManager Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Управляет состояниями и логикой перехода между состояниями для элементов управления.
public ref class VisualStateManager : System::Windows::DependencyObject
public class VisualStateManager : System.Windows.DependencyObject
type VisualStateManager = class
inherit DependencyObject
Public Class VisualStateManager
Inherits DependencyObject
- Наследование
Примеры
В следующем примере создается Rectangle и добавляется VisualStateGroup с именем CommonStates
в присоединенное свойство VisualStateManager.VisualStatesGroups
. В примере определяются объекты MouseOver
и Normal
VisualState в CommonStates
VisualStateGroup. Когда пользователь перемещает указатель мыши на Rectangle, он изменяется с красного на зеленый более одной половины секунды. Когда пользователь перемещает мышь от прямоугольника, Grid сразу же меняется на красный. Обратите внимание, что состояние Normal
не определяет Storyboard.
Storyboard не требуется, так как при переходе Rectangle из состояния MouseOver
в состояние Normal
Storyboard останавливается MouseOver
, а свойство Color для SolidColorBrush возвращается красным.
<Rectangle Name="rect"
Width="100" Height="100"
MouseEnter="rect_MouseEvent"
MouseLeave="rect_MouseEvent">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup Name="MouseStates">
<VisualState Name="MouseEnter">
<Storyboard>
<ColorAnimation To="Green"
Storyboard.TargetName="rectBrush"
Storyboard.TargetProperty="Color"/>
</Storyboard>
</VisualState>
<VisualState Name="MouseLeave" />
<VisualStateGroup.Transitions>
<VisualTransition To="MouseLeave" GeneratedDuration="00:00:00"/>
<VisualTransition To="MouseEnter" GeneratedDuration="00:00:00.5">
<VisualTransition.GeneratedEasingFunction>
<ExponentialEase EasingMode="EaseOut" Exponent="10"/>
</VisualTransition.GeneratedEasingFunction>
</VisualTransition>
</VisualStateGroup.Transitions>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Rectangle.Fill>
<SolidColorBrush x:Name="rectBrush" Color="Red"/>
</Rectangle.Fill>
</Rectangle>
В следующем примере показан обработчик событий, определенный в предыдущем примере, и вызывает метод GoToElementState для перехода между состояниями. Если прямоугольник в предыдущем примере был частью ControlTemplate, примеру потребуется вызвать метод GoToState.
private void rect_MouseEvent(object sender, MouseEventArgs e)
{
if (rect.IsMouseOver)
{
VisualStateManager.GoToElementState(rect, "MouseEnter", true);
}
else
{
VisualStateManager.GoToElementState(rect, "MouseLeave", true);
}
}
Private Sub rect_MouseEvent(ByVal sender As Object, ByVal e As MouseEventArgs)
If rect.IsMouseOver Then
VisualStateManager.GoToElementState(rect, "MouseEnter", True)
Else
VisualStateManager.GoToElementState(rect, "MouseLeave", True)
End If
End Sub
Комментарии
VisualStateManager позволяет указать состояния элемента управления, внешний вид элемента управления, когда он находится в определенном состоянии, а также при изменении состояния элемента управления. Например, Button может иметь немного другой внешний вид, если он нажимается, чем когда он не нажимается. Два состояния, что Button определяется, когда он нажимается ("Pressed"
) и когда он не ("Normal"
). Внешний вид элемента управления, когда он находится в состоянии, определяется VisualState.
VisualState содержит коллекцию объектов Storyboard, указывающих, как внешний вид элемента управления изменяется, когда элемент управления находится в этом состоянии. Вы добавляете визуальные состояния в элемент управления, задав для элемента управления VisualStateManager.VisualStateGroups
присоединенное свойство. Каждая VisualStateGroup содержит коллекцию объектов VisualState, которые являются взаимоисключающими. То есть элемент управления всегда находится в одном состоянии каждого VisualStateGroup.
VisualStateManager также позволяет указать, когда элемент управления входит в определенное состояние. Метод, который необходимо вызвать для изменения состояний, зависит от вашего сценария. При создании элемента управления, использующего VisualStateManager в ControlTemplate, вызовите метод GoToState. Дополнительные сведения о создании элементов управления, использующих VisualStateManager, см. в создании элемента управления с настраиваемым внешним видом. Если вы используете VisualStateManager за пределами ControlTemplate (например, если вы используете VisualStateManager в UserControl или в одном элементе), вызовите метод GoToElementState. В любом случае VisualStateManager выполняет логику, необходимую для соответствующего запуска и остановки раскадровок, связанных с соответствующим состоянием. Например, предположим, что элемент управления определяет состояния, State1
и State2
, каждый из которых имеет раскадровку, связанную с ним. Если элемент управления находится в State1
, и вы передаете State2
GoToState или GoToElementState, VisualStateManager запускает раскадровки в State2
и останавливает раскадровки в State1
.
Элементы управления, включенные в Windows Presentation Foundation (WPF), используют VisualStateManager для изменения визуальных состояний. При создании ControlTemplate для элемента управления, включенного в WPF, можно добавить VisualState объекты в ControlTemplate элемента управления, чтобы указать внешний вид элемента управления в определенном состоянии. Чтобы найти имена визуальных состояний для элементов управления, включенных в WPF, см. стили и шаблоны элементов управления. Логика элемента управления обрабатывает переход между состояниями, поэтому вам не нужно ничего, кроме определения объектов VisualState в новом ControlTemplate. Дополнительные сведения о создании шаблонов элементов управления для существующих элементов управления см. в настройке внешнего вида существующего элемента управления путем созданияcontrolTemplate.
Если вы хотите реализовать собственную логику перехода между состояниями, необходимо наследовать от VisualStateManager, переопределить метод GoToStateCore и задать присоединенное свойство VisualStateManager.CustomVisualStateManager в элементе управления, использующего пользовательскую логику.
Конструкторы
VisualStateManager() |
Инициализирует новый экземпляр класса VisualStateManager. |
Поля
CustomVisualStateManagerProperty |
Определяет свойство зависимостей CustomVisualStateManager. |
VisualStateGroupsProperty |
Определяет свойство зависимостей VisualStateGroups. |
Свойства
DependencyObjectType |
Возвращает DependencyObjectType, который упаковывает тип СРЕДЫ CLR этого экземпляра. (Унаследовано от DependencyObject) |
Dispatcher |
Возвращает Dispatcher, с которым связан этот DispatcherObject. (Унаследовано от DispatcherObject) |
IsSealed |
Возвращает значение, указывающее, запечатан ли этот экземпляр (только для чтения). (Унаследовано от DependencyObject) |
Присоединенные свойства
CustomVisualStateManager |
Возвращает или задает объект VisualStateManager, который переходит между состояниями элемента управления. |
VisualStateGroups |
Возвращает или задает коллекцию объектов VisualStateGroup. |
Методы
CheckAccess() |
Определяет, имеет ли вызывающий поток доступ к этому DispatcherObject. (Унаследовано от DispatcherObject) |
ClearValue(DependencyProperty) |
Очищает локальное значение свойства. Свойство для очистки указывается идентификатором DependencyProperty. (Унаследовано от DependencyObject) |
ClearValue(DependencyPropertyKey) |
Очищает локальное значение свойства только для чтения. Свойство для очистки указывается DependencyPropertyKey. (Унаследовано от DependencyObject) |
CoerceValue(DependencyProperty) |
Принуждает значение указанного свойства зависимостей. Это достигается путем вызова любой функции CoerceValueCallback, указанной в метаданных свойства для свойства зависимостей, так как он существует в вызывающей DependencyObject. (Унаследовано от DependencyObject) |
Equals(Object) |
Определяет, эквивалентен ли предоставленный DependencyObject текущему DependencyObject. (Унаследовано от DependencyObject) |
GetCustomVisualStateManager(FrameworkElement) |
Возвращает присоединенное свойство CustomVisualStateManager. |
GetHashCode() |
Возвращает хэш-код для этого DependencyObject. (Унаследовано от DependencyObject) |
GetLocalValueEnumerator() |
Создает специализированный перечислитель для определения того, какие свойства зависимостей имеют локальные значения для этого DependencyObject. (Унаследовано от DependencyObject) |
GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
GetValue(DependencyProperty) |
Возвращает текущее эффективное значение свойства зависимостей для этого экземпляра DependencyObject. (Унаследовано от DependencyObject) |
GetVisualStateGroups(FrameworkElement) |
Возвращает присоединенное свойство VisualStateGroups. |
GoToElementState(FrameworkElement, String, Boolean) |
Перемещает элемент между двумя состояниями. Используйте этот метод для перехода состояний, определенных приложением, а не определенных элементом управления. |
GoToState(FrameworkElement, String, Boolean) |
Перемещает элемент управления между двумя состояниями. Используйте этот метод для перехода состояний на элемент управления с ControlTemplate. |
GoToStateCore(FrameworkElement, FrameworkElement, String, VisualStateGroup, VisualState, Boolean) |
Преобразует элемент управления между состояниями. |
InvalidateProperty(DependencyProperty) |
Повторно вычисляет эффективное значение для указанного свойства зависимостей. (Унаследовано от DependencyObject) |
MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
OnPropertyChanged(DependencyPropertyChangedEventArgs) |
Вызывается при каждом обновлении эффективного значения любого свойства зависимостей в этом DependencyObject. Определенное свойство зависимостей, которое изменилось, сообщается в данных события. (Унаследовано от DependencyObject) |
RaiseCurrentStateChanged(VisualStateGroup, VisualState, VisualState, FrameworkElement, FrameworkElement) |
Вызывает событие CurrentStateChanging для указанного объекта VisualStateGroup. |
RaiseCurrentStateChanging(VisualStateGroup, VisualState, VisualState, FrameworkElement, FrameworkElement) |
Вызывает событие CurrentStateChanging для указанного объекта VisualStateGroup. |
ReadLocalValue(DependencyProperty) |
Возвращает локальное значение свойства зависимостей, если оно существует. (Унаследовано от DependencyObject) |
SetCurrentValue(DependencyProperty, Object) |
Задает значение свойства зависимостей, не изменяя его источник значений. (Унаследовано от DependencyObject) |
SetCustomVisualStateManager(FrameworkElement, VisualStateManager) |
Задает присоединенное свойство CustomVisualStateManager. |
SetValue(DependencyProperty, Object) |
Задает локальное значение свойства зависимостей, указанное его идентификатором свойства зависимостей. (Унаследовано от DependencyObject) |
SetValue(DependencyPropertyKey, Object) |
Задает локальное значение свойства зависимостей только для чтения, указанное идентификатором DependencyPropertyKey свойства зависимостей. (Унаследовано от DependencyObject) |
ShouldSerializeProperty(DependencyProperty) |
Возвращает значение, указывающее, должны ли процессы сериализации сериализовать значение для указанного свойства зависимостей. (Унаследовано от DependencyObject) |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
VerifyAccess() |
Принудительно применяет доступ к этому DispatcherObjectвызываемого потока. (Унаследовано от DispatcherObject) |