WPF抓住儿童控制的焦点变化

时间:2013-02-13 20:02:43

标签: wpf user-controls focus tabcontrol

UserControl是否有办法在其任何子控件上捕获焦点更改?

我有一个TabControl,每个标签上都有一个UserControl。我试图在选项卡之间切换时保持对控制项的关注。

1 个答案:

答案 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);
}