2009-07-02 2 views
10

TabItem 헤더에 두 개의 단추가있는 WPF TabControl이 있습니다. 머리글 버튼을 클릭하면 선택한 탭이 변경되기를 원합니다.선택한 탭을 변경하는 방법 WPF에서 클릭하는 방법 머리글의 단추가있는 TabControl

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid> 
     <TabControl> 
     <TabItem Content="Item 1 Content"> 
      <TabItem.Header> 
       <StackPanel Orientation="Vertical"> 
        <TextBlock FontSize="14" FontWeight="Bold" Text="Item1"/> 
        <StackPanel Orientation="Horizontal"> 
        <Button Content="Action 1"/> 
        <Button Content="Action 2"/> 
        </StackPanel> 
       </StackPanel> 
      </TabItem.Header> 
     </TabItem> 
     <TabItem Content="Item 2 Content"> 
      <TabItem.Header> 
       <StackPanel Orientation="Vertical"> 
        <TextBlock FontSize="14" FontWeight="Bold" Text="Item2"/> 
        <StackPanel Orientation="Horizontal"> 
        <Button Content="Action 1"/> 
        <Button Content="Action 2"/> 
        </StackPanel> 
       </StackPanel> 
      </TabItem.Header> 
     </TabItem> 
     </TabControl> 
    </Grid> 
</Page> 

이 샘플 쇼 Tab의 몇 : 여기 는 코드입니다. 머리글 배경을 클릭하면 탭이 선택되지만 단추를 클릭하면 탭이 선택되지 않습니다. 버튼이 클릭을 받아들이도록하고 싶지만 버튼에 해당하는 탭을 선택해야합니다. 누구든지 도와 줄 수 있습니까?

덕분에, Hitesh

답변

10

우리는 Event Routing를 사용하여이 작업을 수행 할 수 있습니다. RoutedEvents (예 : 클릭)은 이벤트를 처리 할 때까지 요소 트리를 위로 튕겨 올립니다. 이 때문에 실제로 탭 항목에서 Click 이벤트를 수신하고 있습니다. 아직 아무 것도하지 않고 있습니다. 우리는 각 탭에이 부분을 설정해야 할 것이다, 그러나

<TabItem Content="Item 1 Content" ButtonBase.Click="TabItem_Click"> 

, 그래서 대신에 우리는의 TabItems의 스타일을 만들 수 있습니다 우리는이 같은 탭 항목에서 버튼 클릭을 처리하기 위해 이벤트를 만들 수 있습니다 TabControl에 이렇게 같은 :

<TabControl> 
    <TabControl.ItemContainerStyle> 
     <Style TargetType="{x:Type TabItem}"> 
      <EventSetter Event="ButtonBase.Click" 
         Handler="TabItem_Click" /> 
     </Style> 
    </TabControl.ItemContainerStyle> 
.... 
</TabControl> 

지금, 우리의 이벤트 핸들러에서 우리가 클릭 된 탭을 선택할 수 있습니다

private void TabItem_Click(object sender, RoutedEventArgs e) 
{ 
    Trace.WriteLine("TabItemClicked"); 
    ((TabItem)sender).IsSelected = true; 
    e.Handled = true; 
} 
+0

Dhaval 감사합니다. 이것은 도움이되었습니다. – HiteshP

5
내가 위의 문제의 리에 약간의 RND를하고 있었다

ght 지금은 다른 방법으로 위를 달성 할 수 있지만 여전히 U hv가 실행되는 방식으로 나를 도울 수 있다면 그것은 위대한 것입니다. 목록 상자의에서 selectionChanged 이벤트에

난 그냥 여기 Tbctrl가있는 TabControl의 이름이고 항목 2는 TabItem의에서의 이름 난 즉

  Tbctrl.SelectedItem = (TabItem)Tbctrl.FindName("item2"); 

원하는 하나에 탭 컨트롤의 selectedItem가 변경 위에 언급 된 텍스트 상자를 포함하는 tabcontrol

감사합니다,