【问题标题】:listbox focusing works totally wrong with shortcuts列表框聚焦与快捷方式完全错误
【发布时间】:2023-03-21 22:55:02
【问题描述】:

当我进入 ListBox 控件时,第一个项目获得焦点。当我有一个标签并将目标属性设置为 ListBox(如下面的代码所示)然后使用专用的 Alt 快捷方式时,它将关注的不是第一项而是列表框本身(列表框边框变成虚线)。避免这种不良行为的最佳方法是什么?有没有办法禁用对列表框本身的关注而只允许关注项目?

示例代码:

    <Label Content="_Label" Margin="0,10,0,88" Name="MyLabel" Target="{Binding ElementName=MyListBox}" Height="Auto" />
    <ListBox Width="100" Name="MyListBox" Margin="46,0,639,0" />

行为:

【问题讨论】:

  • When I have a label and set the target property to the listbox - 这到底是什么意思?你能发布代码以使其更清晰。
  • @RohitVats 添加了示例代码

标签: c# wpf listbox .net-4.5


【解决方案1】:

通过设置 Target,您明确要求焦点移动到 listBox。如果你想把它放在第一个 listBox 项目上,你必须手动做。

一种方法是挂钩 GotFocus 事件并使用 TravelRequest 对象将焦点设置到下一个可用项目,该对象会将其放在第一个 listBox 项目上。 p>

XAML:

<ListBox Width="100" Name="MyListBox" Margin="46,0,639,0"
         GotFocus="MyListBox_GotFocus"/>

背后的代码

private void MyListBox_GotFocus(object sender, RoutedEventArgs e)
{
    if (e.OriginalSource == sender)
    {
        TraversalRequest request = new TraversalRequest(FocusNavigationDirection.Next);
        MyListBox.MoveFocus(request);
    }
}

【讨论】:

  • 啊,现在通过源代码检查,它可以按预期工作。我仍然认为 Tab 以某种方式跳过列表框控件很奇怪,尽管它是“下一个”控件并自动关注项目,不像快捷方式。
  • 不确定 WPF 内部如何处理它。可能正在显式处理 Tab 导航以将焦点放在它的第一个容器上,即 listBoxItem。
猜你喜欢
  • 1970-01-01
  • 2022-12-18
  • 1970-01-01
  • 1970-01-01
  • 2019-07-23
  • 2013-07-08
  • 1970-01-01
  • 2016-05-25
  • 1970-01-01
相关资源
最近更新 更多