2013-02-13 55 views
0

是否有一種方法讓UserControl在其任何子控件上捕捉焦點變化?WPF Catch焦點變化的兒童控制

我有一個TabControl它在每個選項卡上都有一個UserControl。我試圖在標籤之間切換時保持對控件項目的關注。

回答

1

您可以訂閱usercontrol中每個控件的LostFocus事件。

要自動執行此操作,您可以訂閱初始化並循環遍歷子項。但是,您需要直接瞭解您的孩子(就像他們是成員變量一樣),否則您的用戶控件必須包含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); 
} 
+0

謝謝,這是一個很好的解決方案。然而,在我的頭上敲了很長一段時間後,我發現我認爲是最好的解決方案。那是重寫OnPreviewLostKeyboardFocus方法。 – FodderZone 2013-02-14 18:25:09