在 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;

我希望突出显示所选代码按钮。我该如何解决这个问题?

在 WPF 中,如何在不单击按钮的情况下将焦点放在按钮列表中

看起来您希望在选择项目时,内部按钮应聚焦。因此,您可以尝试添加一些触发器,如下所示:

<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>

然后,当您单击某个项目以选择它或使用代码时,里面的按钮将自动聚焦。但是,当您使用箭头键(向上和向下)在列表框项中导航时,所选项仍具有焦点。该行为实际上是我们应该保留的,因为只有当所选项目仍然具有焦点时,我们仍然可以使用向上/向下箭头键继续导航。否则,如果里面的按钮有焦点,我们就无法使用向上/向下箭头键继续导航(除非你使用一些代码隐藏来处理某个键事件)。

相关文章: