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


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 и NormalVisualState в CommonStatesVisualStateGroup. Когда пользователь перемещает указатель мыши на Rectangle, он изменяется с красного на зеленый более одной половины секунды. Когда пользователь перемещает мышь от прямоугольника, Grid сразу же меняется на красный. Обратите внимание, что состояние Normal не определяет Storyboard. Storyboard не требуется, так как при переходе Rectangle из состояния MouseOver в состояние NormalStoryboard останавливается 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, и вы передаете State2GoToState или 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)

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