2013-02-13 3 views
0

UserControl이 자식 컨트롤 중 하나에서 포커스 변경을 잡을 수있는 방법이 있습니까?WPF 자식 컨트롤의 포커스 변경

TabControl에는 각 탭마다 UserControl이 있습니다. 탭간에 전환 할 때 컨트롤 항목에 초점을 유지하려고합니다.

답변

1

사용자 컨트롤 내에서 각 컨트롤의 LostFocus 이벤트를 구독 할 수 있습니다.

이 작업을 자동으로 수행하려면에 on을 (를) 등록하고 자식을 반복합니다. 그러나 멤버 변수와 마찬가지로 자식을 직접 알아야하거나 사용자 정의 컨트롤에 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