none
Что такое Visual State Manager и как использовать его для управления визуальными состояниями? RRS feed

  • Общие обсуждения

  • Visual State Manager управляет состояниями и логикой для переходов между состояниями элементов управления. VisualStateManager позволяет указывать состояния для элемента управления, внешний вид элемента управления в определенном состоянии, и порядок изменения состояния элемента управления. Например, нажатая кнопка Button может слегка отличаться от не нажатой. Два состояния, которым соответствует Button, когда она нажата ("Pressed") и когда она не нажата ("Normal"). Внешний вид элемента управления, находящегося в некотором состоянии, определяется VisualState . VisualState содержит коллекцию объектов Storyboard, указывающих, как изменяется внешний вид элемента управления при определенном состоянии элемента управления. Состояния просмотра добавляются в элемент управления посредством вложенного свойства зависимостей VisualStateManager.VisualStateGroups элемента управления. Каждый объект VisualStateGroup содержит коллекцию взаимоисключающих объектов VisualState. Элемент управления всегда находится в точности одном состоянии в каждой группе VisualStateGroup.

    В следующем примере, мы вызываем VisualStateManager.GoToElementState, VisualStateManager.GoToState для изменения состояния элемента, и GetVisualStateGroups, чтобы получить присоединенное свойство VisualStateManager.VisualStateGroups . Пример демонстрирует изменения состояния эллипса между “нормальным” и “сигнальным”:

    XAML разметка:

    <StackPanel>
     <Ellipse Name="ellipse" Width="100" Height="100" Fill="Green">
     <VisualStateManager.VisualStateGroups>
      <VisualStateGroup Name="CommonStates">
      <VisualState Name="Normal"/>
      <VisualState Name="Warning">
       <Storyboard>
       <ColorAnimation To="Red" Storyboard.TargetName="ellipse" Storyboard.TargetProperty="Fill.Color"/>
       </Storyboard>
      </VisualState>
      <VisualStateGroup.Transitions>
       <VisualTransition To="Normal" GeneratedDuration="00:00:01"/>
       <VisualTransition To="Warning" GeneratedDuration="00:00:01"/>
      </VisualStateGroup.Transitions>
      </VisualStateGroup>
     </VisualStateManager.VisualStateGroups>
     </Ellipse>
     <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
     <Button Name="buttonNormal" Content="Normal" Click="Normal_Click" Margin="2"/>
     <Button Name="buttonWarning" Content="Warning" Click="Warning_Click" Margin="2"/>
     </StackPanel>
    </StackPanel>
    
    

    Код:

    private void Normal_Click(object sender, RoutedEventArgs e)
    {
     VisualStateManager.GoToElementState(ellipse, "Normal", true);
    }
    
    private void Warning_Click(object sender, RoutedEventArgs e)
    {
     VisualStateManager.GoToElementState(ellipse, "Warning", true);
    } 
    
    


    Для связи [mail]
    14 декабря 2010 г. 10:42