2009-12-08 73 views
23

如何將TabItem.Header設置爲從幾個字段獲取的綁定,每個綁定以不同的大小顯示,全部位於原始標題文本的位置;而不會覆蓋標題的默認樣式和行爲 - 我只需要文本。TabControl.ItemTemplate:將TabItem.Header.Text設置爲使用StringFormat的多重綁定

我試圖設置它的模板,但它然後創建一個包含內部控件的矩形,並且此矩形對用戶點擊沒有響應,並且也具有控件風格,我希望這些控件不可見,只有它的文字應該是可見的。

我已經試過如下:

<TabControl ItemsSource="{Binding}"> 
    <TabControl.ItemTemplate> 
     <DataTemplate> 
      <TabItem> 
       <TabItem.Header> 
        <MultiBinding StringFormat="{}{0}-{1}"> 
         <Binding Path="Title"/> 
         <Binding Path="Category.Title"/> 
        </MultiBinding> 
       </TabItem.Header> 
       <TabItem.Content> 
        <TextBlock> 
         Here is what is gonna be in the TabItem - not header 
        </TextBlock> 
       </TabItem.Content> 
      </TabItem> 
     </DataTemplate> 
    </TabControl.ItemTemplate> 
</TabControl> 

但它不會顯示任何東西。

我也試着將HeaderTemplate設置爲DataTemplate,但是會發生什麼呢,DataTemplate會覆蓋TabItem樣式,而當我單擊文本時它不會進入單擊的選項卡,此外,未選中的選項卡看起來非常有趣的是,我看到文本的矩形浮動,而我希望它是透明的。

因此,總結我的問題,我想要設置TabItem.Header.Text到帶有StringFormat的MultiBinding。

+3

我幾小時前給出了幾乎相同的答案。但似乎這個問題已被刪除並轉貼? – Dabblernl 2009-12-09 00:22:12

+0

爲什麼您刪除此問題的以前版本?爲什麼不改變你在哪裏詢問,並留下評論意見,然後你讓答案知道他們錯過了這個標記,詩歌搗毀那裏的工作? – 2009-12-09 00:51:13

回答

61

TabControl包含一個ContentTemplate屬性以及它從ItemsControl繼承的ItemTemplate。它使用ContentTemplate來區分內容區域中顯示的內容,而ItemTemplate爲Header定義模板。此外,您的ItemSource中的每個Item都會自動包裝在TabItem中;它不需要在ItemTemplate中重新創建,因爲它會嘗試在您注意到的時候在標題中放置一個TabItem。

不是在ItemTemplate中重新創建一個TabItem,而是使用ItemTemplate來定義您的Header內容,並使用ContentTemplate來定義您的內容。

<TabControl ItemsSource="{Binding}"> 
    <TabControl.ItemTemplate> 
     <DataTemplate> 
      <TextBlock> 
       <TextBlock.Text> 
        <MultiBinding StringFormat="{}{0}--{1}"> 
         <Binding Path="Title" /> 
         <Binding Path="Category.Title" /> 
        </MultiBinding> 
       </TextBlock.Text> 
      </TextBlock> 
     </DataTemplate> 
    </TabControl.ItemTemplate> 
    <TabControl.ContentTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding MyContent}" /> 
     </DataTemplate> 
    </TabControl.ContentTemplate> 
</TabControl> 

在您的第一段中,您提到想要在頁眉的綁定部分設置不同的大小。如果你確實想這樣做,你將不能像上面那樣使用單個Binding或MultiBinding來設置文本。相反,您可以將TextBlocks嵌套到不同的格式以實現此目的。

<TabControl.ItemTemplate> 
    <DataTemplate> 
     <TextBlock> 
      <TextBlock Text="{Binding Title}" 
         FontSize="12" /> 
      <Run Text="--" /> 
      <TextBlock Text="{Binding Category.Title}" 
         FontSize="10" /> 
     </TextBlock> 
    </DataTemplate> 
</TabControl.ItemTemplate> 
+0

這些是什麼風格TargetTypes?我知道TabItem是用於按鈕的,但是頁面呢? – Patrick 2013-12-06 03:03:32

+0

這真的是一個非常棘手的事情來解決。 +1 – 2015-04-03 01:31:19