2012-01-30 57 views
1

我似乎錯過了一些東西:我想要一個頂部帶有圓角的TabControl。因此,第一個和最後一個TabItem應該與其他的不同。我可以使用樣式來設置所有TabItem的樣式,但我怎樣樣式化特別是第一個和最後一個TabItem/Header?第一個和最後一個TabControl項目標題的不同邊框

讀取TabControl.Items列表中的第一個和最後一個元素不起作用,因爲可以將非TabItem控件(例如Button)添加到TabControl中,TabControl然後將其寫入到TabControl.Items列表中,因此不能被轉換爲TabItem。如果我將一個Button添加到TabControl,TabControl會自動創建一個TabItem,但我不知道如何訪問它。

我希望問題是可以理解的... 我會很感激任何答案!

+0

您是否聽說過段落? – 2012-01-30 15:06:14

+0

嗨,試着用資源鍵創建3種不同的樣式。第一種樣式在左上角有一個圓角,第二種樣式在右上角有一個圓角,第三種樣式是標頭之間的標籤項的默認樣式。 – 2012-01-30 15:21:06

+0

如何將樣式分配給添加的TabItems? Tabs是自動添加的,我不知道在編譯時哪個選項卡是第一個或最後一個。這就是問題所在 – BoltzmannBrain 2012-01-30 18:21:24

回答

0

我使用「ItemContainerStyleSelector」解決了這個問題,它在我們的構造函數中接收了我的TabControl的一個實例。然後,它可以在SelectStyle方法中遍歷它的父項,並將每個項與由選項卡控件傳遞給它的項進行比較。它看起來像這樣:

public override Style SelectStyle(object item, DependencyObject container) 
    { 
     Style leftStyle = Application.Current.FindResource(Constants.TabItemLeftStyleKey) as Style; 
     Style normalStyle = Application.Current.FindResource(Constants.TabItemNormalStyleKey) as Style; 
     Style rightStyle = Application.Current.FindResource(Constants.TabItemRightStyleKey) as Style; 

     if (item.Equals(this.parent.Items[0])) 
     { 
      return leftStyle; 
     } 
     else if (item.Equals(this.parent.Items[this.parent.Items.Count - 1])) 
     { 
      return rightStyle; 
     } 
     else 
     { 
      return normalStyle; 
     } 
    } 
相關問題