что такое визуальное состояние в WPF? и кто знает, как начать понимать и использовать?
Что такое визуальное состояние в WPF? и кто знает, как начать понимать и использовать?
может быть, как полный учебник, потому что я никогда не касаюсь визуального состояния раньше. или просто простой пример кода
thx да
2 ответов
визуальные состояния в WPF - это управление внешним видом элементов управления. Возможно, что состояние элемента управления изменится, а затем появится изменение элемента управления в ответ на изменение состояния. Например, если элемент управления нажат / отключен / в фокусе, он может иметь различный внешний вид для каждого состояния. Существует пример использования триггерного механизма WPF для изменения внешнего вида элементов управления здесь; это предоставит вам некоторую общую справочную информацию при изменении внешнего вида элементов управления. Существует хороший общий учебник по WPF здесь и хорошее объяснение визуального состояния здесь. Для более расширенного использования есть информация от Microsoft о Visual State Manager здесь
визуальное состояние используется для изменения внешнего вида элемента управления wpf в разных состояниях элемента управления, например , в случае переключателя, он может отображаться по-разному при фокусировке, при нажатии или отключении,
визуальные состояния подпадают под различные группы визуальных состояний, такие как
- CommonStates
- CheckStates
- FocusStates
в основном используются визуальные состояния :
- мыши
- прижал
- отключен
- проверил
- Unchecked
- неопределено
- вопрос
- Нецеленаправленных
- 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>
