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 и добавляется в присоединенное VisualStateGroupVisualStateManager.VisualStatesGroups свойство с именем CommonStates . В примере определяются MouseOver объекты и NormalVisualState в CommonStatesVisualStateGroup. Когда пользователь перемещает указатель мыши на Rectangle, он меняется с красного на зеленый в течение половины секунды. Когда пользователь перемещает мышь от прямоугольника, Grid сразу же меняется на красный. Обратите внимание, что Normal состояние не определяет Storyboard. Объект Storyboard не является обязательным, так как при Rectangle переходе из состояния в NormalMouseOver состояние для MouseOver останавливается, Storyboard а 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 , необходимую для правильного запуска и остановки раскадровок, связанных с соответствующим состоянием. Например, предположим, что элемент управления определяет состояния и State1State2, с каждым из которых связан раскадровка. Если элемент управления находится в State1 и вы передаете State2 в GoToState или GoToElementState, VisualStateManager он запускает раскадровку в State2 и останавливает раскадровку в State1.

Элементы управления, входящие в состав Windows Presentation Foundation (WPF), используют VisualStateManager для изменения визуальных состояний. При создании ControlTemplate для элемента управления, входящего в состав WPF, можно добавить VisualState объекты в элементы управления ControlTemplate , чтобы указать внешний вид элемента управления в определенном состоянии. Чтобы найти имена визуальных состояний для элементов управления, включенных в WPF, см. статью Стили и шаблоны элементов управления. Логика элемента управления обрабатывает переход между состояниями, поэтому вам не нужно ничего делать, кроме определения VisualState объектов в новом ControlTemplate. Дополнительные сведения о создании шаблонов элементов управления для существующих элементов управления см. в статье Настройка внешнего вида существующего элемента управления путем создания элемента управленияTemplate.

Если вы хотите реализовать собственную логику для перехода между состояниями, необходимо наследовать от 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)

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