我有一个源自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的子项)?
答案 0 :(得分:1)
事实证明,如果没有重新实现Automation Peers,就会有一个更简单的解决方案(因为我的自定义列表已经为其子项目提供了有效的对等项)。
我所要做的就是按照我的清单风格设置:
<Setter Property="KeyboardNavigation.TabNavigation" Value="Cycle" />
有关详细信息,请参阅Focus Overview page on MSDN。