Кнопки Repeat не теряют фокус и остаются выделенными навсегда
Я работаю над своим элементом управления Up Down, и он работает нормально, но сегодня я заметил странную проблему с кнопками повтора в управлении. Как только я нажимаю кнопки +/- повтора, они подсвечиваются синей рамкой (это нормально), но проблема в том, что они остаются подсвеченными, даже если я нажимаю на другие кнопки или элементы управления на странице.
Вот скриншот -
и вот я использую xaml -
<!-- RepeatButton styles -->
<Style
x:Key="RepeatButtonPathStyle"
TargetType="Path">
<Setter
Property="Width"
Value="3" />
<Setter
Property="Height"
Value="3" />
<Setter
Property="MinWidth"
Value="3" />
<Setter
Property="MinHeight"
Value="3" />
<Setter
Property="HorizontalAlignment"
Value="Center" />
<Setter
Property="VerticalAlignment"
Value="Center" />
<Setter
Property="Stretch"
Value="None" />
<Setter
Property="StrokeThickness"
Value="1" />
<Setter
Property="Stroke"
Value="{Binding RelativeSource={RelativeSource AncestorType=RepeatButton},
Path=Foreground}" />
</Style>
<DataTemplate
x:Key="IncreaseGlyph">
<Path
Data="M0,1.5 H3 M1.5,0 V3"
Style="{StaticResource RepeatButtonPathStyle}" />
</DataTemplate>
<DataTemplate
x:Key="DecreaseGlyph">
<Path
Data="M0,1.5 H3"
Style="{StaticResource RepeatButtonPathStyle}" />
</DataTemplate>
а также
<Grid
Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition
Height="*" />
<RowDefinition
Height="*" />
</Grid.RowDefinitions>
<Button
Grid.Row="0"
Grid.RowSpan="2"
IsHitTestVisible="True"
IsTabStop="False">
<Button.Template>
<ControlTemplate
TargetType="Button">
<Grid
Background="Transparent" />
</ControlTemplate>
</Button.Template>
</Button>
<RepeatButton
Grid.Row="0"
HorizontalContentAlignment="Center"
Command="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=IncreaseCommand}"
ContentTemplate="{StaticResource IncreaseGlyph}"
ToolTip="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=IncreaseButtonToolTip}"
ToolTipService.BetweenShowDelay="1000"
ToolTipService.InitialShowDelay="1000"
ToolTipService.IsEnabled="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=ShowUpDownButtonToolTip}">
</RepeatButton>
<RepeatButton
Grid.Row="1"
HorizontalContentAlignment="Center"
Command="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=DecreaseCommand}"
ContentTemplate="{StaticResource DecreaseGlyph}"
ToolTip="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=DecreaseButtonToolTip}"
ToolTipService.BetweenShowDelay="1000"
ToolTipService.InitialShowDelay="1000"
ToolTipService.IsEnabled="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=ShowUpDownButtonToolTip}">
</RepeatButton>
</Grid>
Есть указатели?
2 ответа
Решение
Единственное решение, которое я нашел, чтобы решить эту проблему, это установить Focusable="False"
на RepeatButton.
Я думаю, вы должны заменить этот сеттер:
<Setter Property="Stroke" Value="{Binding RelativeSource=
{RelativeSource AncestorType=RepeatButton},Path=Foreground}" />
с триггером вместо:
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Stroke"
Value="{Binding RelativeSource={RelativeSource AncestorType=RepeatButton},
Path=Foreground}" />
</Trigger>
</Style.Triggers>
Таким образом, он вернет штрих к его значению по умолчанию, когда ваше условие триггера ложно (мышь в этом случае отсутствует).