что такое визуальное состояние в 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>