在 WPF 中,如何在不单击按钮的情况下将焦点放在按钮列表中
本文关键字:按钮 情况下 焦点 列表 单击 WPF | 更新日期: 2023-09-27 18:30:28
>我有一个列表
<ListBox Name="PageNumberListItemsControl" VirtualizingPanel.IsVirtualizing="True"
ItemsPanel="{StaticResource MyPanel}"
ItemTemplate="{StaticResource CountTemplate}" Grid.Column="1">
</ListBox>
用于创建按钮列表的模板
<DataTemplate x:Key="CountTemplate">
<Button Content="{Binding}" Click="Button_Click">
<Button.Style>
<Style>
<Setter Property="FocusManager.FocusedElement"
Value="{Binding RelativeSource={RelativeSource Self}}">
</Setter>
</Style>
</Button.Style>
</Button>
</DataTemplate>
用于更新列表中位置的代码
PageNumberListItemsControl.SelectedIndex = CurrentPageNumber - 1;
我希望突出显示所选代码按钮。我该如何解决这个问题?
看起来您希望在选择项目时,内部按钮应聚焦。因此,您可以尝试添加一些触发器,如下所示:
<DataTemplate x:Key="CountTemplate">
<Button Content="{Binding}" Click="Button_Click" Name="bt">
</Button>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsSelected,
RelativeSource={RelativeSource AncestorType=ListBoxItem}}" Value="true">
<Setter TargetName="bt" Property="FocusManager.FocusedElement"
Value="{Binding ElementName=bt}"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
然后,当您单击某个项目以选择它或使用代码时,里面的按钮将自动聚焦。但是,当您使用箭头键(向上和向下)在列表框项中导航时,所选项仍具有焦点。该行为实际上是我们应该保留的,因为只有当所选项目仍然具有焦点时,我们仍然可以使用向上/向下箭头键继续导航。否则,如果里面的按钮有焦点,我们就无法使用向上/向下箭头键继续导航(除非你使用一些代码隐藏来处理某个键事件)。