У меня есть 3 кнопки по нажатии которых, в DataGrid под ними отображаются соответствующие им таблицы. IsFocused каждой кнопки обозначается изменением цвета ее BorderBrush. Мне нужно, чтобы выделение кнопки сохранялось, до момента пока я не нажму кнопку переключения на другую таблицу.
Сами кнопки:
<StackPanel Grid.Row="2" Orientation="Horizontal" Margin="0 20 0 0">
<Button x:Name="btnTable1" Content="Таблица 1" Command="{Binding ShowTable1Command}" Style="{StaticResource tabButton}" Width="100"/>
<Button x:Name="btnTable2" Content="Таблица 2" Command="{Binding ShowTable2Command}" Style="{StaticResource tabButton}" />
<Button x:Name="btnTable3" Content="Таблица 3" Command="{Binding ShowTable3Command}" Style="{StaticResource tabButton}"/>
</StackPanel>
Стиль кнопок:
<Style x:Key="tabButton" TargetType="Button">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Foreground" Value="#121518"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Width" Value="120" />
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="Height" Value="45" />
<Setter Property="FontSize" Value="14" />
<Setter Property="FontWeight" Value="SemiBold" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}" BorderThickness="0 0 0 3" BorderBrush="{TemplateBinding BorderBrush}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderBrush" Value="#784ff2"/>
</Trigger>
<Trigger Property="IsFocused" Value="True">
<Setter Property="BorderBrush" Value="#784ff2"/>
</Trigger>
</Style.Triggers>
</Style>
Я пытался:
- Использовать файл xaml.cs для определения логики поведения при возникновении событий Got/Lost focus.
- Создать 3 динамическиx ресурса <SolidColorBrush Color="Transparent"... "borderBrush1", "borderBrush2", "borderBrush3" и для каждой кнопки переопределить стиль (BasedOn tabButton) с присвоением каждой определенного BorderBrush. Чтобы затем в обработчиках событий рас/фокусировки просто менять цвета.
Варианты выше результата не дали, Фокусировка все равно сбивалась в какой-то момент и начинала пропадать при попытке взаимодействия с любыми другими элементами.
Я плохо понимаю как работает FocusVisualStyle. Из документации, с моим уровнем работы с wpf, полезного мало что смог вынести. Решается ли задача с его использованием? Также слабо понимаю Xaml.Behaviors, Решается ли задача преимущественно с их использованием?
ListBoxвместо всего этого? https://ru.stackoverflow.com/a/1266479/373567 – aepot Nov 05 '22 at 16:37Focusable="False", очень просто. – aepot Nov 05 '22 at 17:08