что такое визуальное состояние в WPF? и кто знает, как начать понимать и использовать?

Что такое визуальное состояние в WPF? и кто знает, как начать понимать и использовать?

может быть, как полный учебник, потому что я никогда не касаюсь визуального состояния раньше. или просто простой пример кода

thx да

2 ответов


визуальные состояния в WPF - это управление внешним видом элементов управления. Возможно, что состояние элемента управления изменится, а затем появится изменение элемента управления в ответ на изменение состояния. Например, если элемент управления нажат / отключен / в фокусе, он может иметь различный внешний вид для каждого состояния. Существует пример использования триггерного механизма WPF для изменения внешнего вида элементов управления здесь; это предоставит вам некоторую общую справочную информацию при изменении внешнего вида элементов управления. Существует хороший общий учебник по WPF здесь и хорошее объяснение визуального состояния здесь. Для более расширенного использования есть информация от Microsoft о Visual State Manager здесь


визуальное состояние используется для изменения внешнего вида элемента управления wpf в разных состояниях элемента управления, например , в случае переключателя, он может отображаться по-разному при фокусировке, при нажатии или отключении,

визуальные состояния подпадают под различные группы визуальных состояний, такие как

  1. CommonStates
  2. CheckStates
  3. FocusStates

в основном используются визуальные состояния :

  1. мыши
  2. прижал
  3. отключен
  4. проверил
  5. Unchecked
  6. неопределено
  7. вопрос
  8. Нецеленаправленных
  9. PointerFocused

приведен пример visualstate, используемого в стиле переключателя

<Style TargetType="RadioButton">
    <Setter Property="Background"
            Value="Transparent" />
    <Setter Property="Foreground"
            Value="{DynamicResource BlackBrush}" />
    <Setter Property="Padding"
            Value="1,4,0,0" />
    <Setter Property="HorizontalAlignment"
            Value="Stretch" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="RadioButton">
                <Border Background="{TemplateBinding Background}">
                    <vsm:VisualStateManager.VisualStateGroups>
                        <vsm:VisualStateGroup x:Name="CommonStates">
                            <vsm:VisualState x:Name="Normal" >
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundEllipse"
                                                                   Storyboard.TargetProperty="Stroke">
                                        <DiscreteObjectKeyFrame KeyTime="0"
                                                                Value="{DynamicResource HpGray13Brush}" />
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </vsm:VisualState>
                            <vsm:VisualState x:Name="MouseOver">
                                <Storyboard>

                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundEllipse"
                                                                   Storyboard.TargetProperty="Stroke">
                                        <DiscreteObjectKeyFrame KeyTime="0"
                                                                Value="{DynamicResource HpGray15Brush}" />
                                    </ObjectAnimationUsingKeyFrames>

                                </Storyboard>
                            </vsm:VisualState>
                            <vsm:VisualState x:Name="Pressed">
                                <Storyboard>

                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundEllipse"
                                                                   Storyboard.TargetProperty="Stroke">
                                        <DiscreteObjectKeyFrame KeyTime="0"
                                                                Value="{DynamicResource GreenBrush}" />
                                    </ObjectAnimationUsingKeyFrames>

                                </Storyboard>
                            </vsm:VisualState>
                            <vsm:VisualState x:Name="Disabled">
                                <Storyboard>

                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundEllipse"
                                                                   Storyboard.TargetProperty="Stroke">
                                        <DiscreteObjectKeyFrame KeyTime="0"
                                                                Value="{DynamicResource HpGray1Brush}" />
                                    </ObjectAnimationUsingKeyFrames>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="CheckGlyph"
                                                                   Storyboard.TargetProperty="Fill">
                                        <DiscreteObjectKeyFrame KeyTime="0"
                                                                Value="{DynamicResource Gray1Brush}" />
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </vsm:VisualState>
                        </vsm:VisualStateGroup>