2009-07-02 104 views
10

我有一個WPF TabControlTabItem標題中有幾個按鈕。 我希望選中的選項卡在點擊按鈕時改變。這裏 的代碼片段:如何更改按鈕上的選定選項卡單擊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秒。如果單擊標題背景,則會選擇一個選項卡,但是,如果單擊某個按鈕,則該選項卡未被選中。我希望按鈕接受點擊,但我也希望按鈕對應的選項卡被選中。誰能幫忙?

感謝, 亞太區首席技術官Matt

回答

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

謝謝。這有幫助。 – HiteshP 2009-07-06 14:35:20

5

我對上述問題裏做一個小小的RND現在,並能夠以不同的方式實現上述目標,但如果你能以我執行的方式來幫助我,那將是一件好事。

在列表框的SelectionChanged事件我只是改變標籤控件的selectedItem設置爲一個我想即

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

這裏Tbctrl是TabControl的名稱和ITEM2是的TabItem之名包含上面提到的文本框的tabcontrol。

問候,

Dhaval