1

有没有办法让 UserControl 捕捉到其任何子控件的焦点变化?

TabControl有一个在每个选项卡上都有一个 UserControl 的。在选项卡之间切换时,我试图将注意力集中在控制项上。

4

1 回答 1

1

您可以订阅用户LostFocus控件中每个控件的事件。

要自动执行此操作,您可以订阅 on initialize 并循环遍历子项。但是,您要么需要直接了解您的孩子(因为它们是成员变量),要么您的用户控件必须是/包含 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);
}
于 2013-02-13T20:24:33.060 回答