Я пытался реорганизовать свое приложение wpf, чтобы использовать Visual State Manager вместо триггеров, но столкнулся с парой проблем, которые не могу решить.
<UserControl
x:Class="Controls.Button.ArtisanButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d">
<UserControl.Resources>
</UserControl.Resources>
<Grid VerticalAlignment="Center"
Margin="{Binding RelativeSource={RelativeSource Self},
Path=Margin,
Mode=OneTime}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="4" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Rectangle x:Name="FocusMarker"
Grid.Column="0"
Grid.Row="0"
Style="{StaticResource VerticalFocusMarkerBaseStyle}" />
<Button Grid.Column="1"
Grid.Row="0"
Style="{StaticResource ArtisanButtonBaseStyle}"
Content="{Binding Content,
Mode=OneTime}"
Command="{Binding ClickAction}"
IsCancel="{Binding Cancel,
Mode=OneTime}"
IsDefault="{Binding IsDefault,
Mode=OneTime}"
ToolTip="{Binding ToolTip,
Mode=OneWay}" />
<VisualStateManager.VisualStateGroups>
<VisualStateGroup Name="FocusStates">
<VisualState Name="Unfocused">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="FocusMarker"
Storyboard.TargetProperty="Opacity"
To="0"
Duration="0:0:0.25" />
</Storyboard>
</VisualState>
<VisualState Name="Focused">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="FocusMarker"
Storyboard.TargetProperty="Opacity"
To="1"
Duration="0:0:0.25" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Grid>
</UserControl>
Вопрос 1. В приведенном выше коде визуальное состояние Focused
никогда не вызывается, я думаю, это потому, что Grid
не может получить Focus
, но, насколько я понимаю, VisualStateManager
должен быть включен только в элемент root, так что я могу сделать чтобы заставить его работать?
Вопрос 2: мне нужно, чтобы VisualStateManager
отвечал на дочерний элемент управления Button
, а не на root Grid
, но я не могу разместить VisualStateManager
на Кнопка, потому что кнопка не является элементом управления root. Есть ли способ сделать это?
Спасибо за любую помощь, которую вы можете мне оказать.