2010-05-27 1 views
1

는 내가있는 TabControl이TabControl의 ItemTemplate에서 컨트롤을 어떻게 찾을 수 있습니까?

<TabControl 
    Name="myTabControl" 
     IsSynchronizedWithCurrentItem="True" 
     ItemsSource="{Binding}">        
       <TabControl.ItemTemplate> 
        <DataTemplate> 
          <DockPanel Width="120"> 
           <Button Name="CloseScreen"/> 
           <ContentPresenter Content="{Binding Path=DisplayName}"/> 
          </DockPanel> 
        </DataTemplate> 
       </TabControl.ItemTemplate> 
</TabControl> 

내가 코드에서 ItemTemplate을에있는 버튼을 찾을 수 있습니다.

감사합니다.

+0

버튼을 발견하면 버튼으로 무엇을 할 것인지 물어볼 수 있습니까? WPF를 사용하면 컨트롤을 직접 조작하지 않는 작업을 수행 할 수있는 대체 방법이 있습니다. –

+0

컨트롤 이름과 ViewModel 속성/메소드 이름을 사용하여 런타임에 컨트롤을 ViewModel 객체에 바인딩하고 싶습니다. 이 방법으로 버튼의 Command 속성을 동적으로 설정해야합니다. – frameworkninja

답변

1

시도해 볼 수 있습니다 LogicalTreeHelper.FindLogicalNode. 예를 들어 :

var button = LogicalTreeHelper.FindLogicalNode(myTabControl, "CloseScreen"); 

하지만 조심 : 당신이 당신의 탭 항목에 대한 DataTemplate을을 사용하고 있기 때문에, 당신은 CloseScreen라는 여러 버튼을 끝낼 것이고, FindLogicalNode 아마도 첫 번째를 반환합니다.

또 다른 방법은 LogicalTreeHelper.GetChildren을 사용하여 재귀 적으로 논리 트리를 검색하는 것입니다. 여기서 직면하게 될 문제는 언제 멈출지를 아는 것입니다.

+0

예, 작동합니다;) 감사합니다. – frameworkninja

0

클릭 이벤트를 사용하려는 경우 대신 명령을 사용해보십시오.

+0

아니요, 런타임에 버튼 인스턴스를 찾고 싶습니다. – frameworkninja