自定义控件上的UI自动化:需要使用CTRL + TAB(选项卡侧重于第一个对象)

时间:2010-01-26 23:08:44

标签: wpf wpf-controls custom-controls

我有一个源自ListView的自定义控件。此列表视图使用带有两列的GridView(每个列都适当模板化):一列是标题(只是标签),另一列是控件。

使用时,它看起来像这样:


<l:CoolList>
    <TextBox l:CoolList.Caption="Name" Text={Binding Name} />
    <TextBox l:CoolList.Caption="Age" Text={Binding Age} />
    <WrapPanel>
        <Button Click="btnOkay_click" />
        <Button Click="btnCancel_click" />
    </WrapPanel>
</l:CoolList>

这最终看起来像这样(一切都很好地对齐):

Name: [____________]
 Age: [____________]
      [Okay][Cancel]

现在,当我想使用TAB遍历这些文本框时,它只关注第一个文本框。要将焦点更改为其他文本框,我必须按CTRL + TAB。

我查看了MSDN网站,看起来我可能需要实现一个AutomationPeer,但它真的让我感到困惑。有这方面经验的人是否知道如何使子文本框可访问(仅使用TAB)?

注意:WPFToolKit数据网格是我正在寻找的一个很好的例子。您可以按TAB(而不是CTRL + TAB)浏览每个网格项。他们似乎为DataGrid,每行,每行演示者,每个单元格和每个单元格演示者实现AutomationPeers。我正在寻找一个通用的解决方案 - 我可以将控件的子项暴露给TAB。

问题:

如何使ListView的项目可供TAB访问(可能是ListViewItem的子项)?

1 个答案:

答案 0 :(得分:1)

事实证明,如果没有重新实现Automation Peers,就会有一个更简单的解决方案(因为我的自定义列表已经为其子项目提供了有效的对等项)。

我所要做的就是按照我的清单风格设置:

<Setter Property="KeyboardNavigation.TabNavigation" Value="Cycle" />

有关详细信息,请参阅Focus Overview page on MSDN