UserControl是否有办法在其任何子控件上捕获焦点更改?
我有一个TabControl
,每个标签上都有一个UserControl。我试图在选项卡之间切换时保持对控制项的关注。
答案 0 :(得分:1)
您可以订阅usercontrol中每个控件的LostFocus
事件。
要自动执行此操作,您可以订阅on initialize并循环访问子项。但是,您需要直接了解您的孩子(因为他们是成员变量),或者您的usercontrol必须是/包含ItemsControl。
如果您从模板中包含项目控件,则必须使用为该部件指定的名称搜索模板控件。
<ControlTemplate>
<Grid x:Name="PART_ChildrenContainer">
<ItemsPresenter> <!--This will contain your children-->
</Grid>
</ControlTemplate>
然后你必须做以下事情。
var grid = (Grid)this.Template.FindName("PART_ChildrenContainer",...);
foreach(var child in grid.Children)
{
child.PreviewLostKeyboardFocus +=
new System.Windows.Input.KeyboardFocusChangedEventHandler(eventHandler);
}