2009-12-08 24 views
23

TabItem.Header'ı, her biri farklı başlıkta gösterilen, her biri özgün başlık metninin yerine, birkaç alandan alınan bağlamalar için nasıl ayarlayabilirim ; varsayılan stil ve üstbilginin davranışını geçersiz kılmadan - sadece metne ihtiyacım var.TabControl.ItemTemplate: StringFormat ile bir MultiBinding için TabItem.Header.Text set

Şablonunu ayarlamayı denedim, ancak daha sonra iç denetimleri içeren bir dikdörtgen oluşturur ve bu dikdörtgen kullanıcı tıklamaları için duyarlı değildir ve ayrıca denetim stiline sahip olur, bu denetimlerin görünmez olmasını isterim, yalnızca metin görünür olmalıdır.

aşağıdaki denedim:

<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> 

Ama hiçbir şey göstermez.

Ayrıca bir DataTemplate için HeaderTemplate ayarlamayı denedim ama ne olur, DataTemplate TabItem stili geçersiz kılar ve metni tıklattığınızda tıklatılan sekmeye gitmez, ayrıca, seçilmemiş sekmeler çok Komik, şeffaf olmasını istediğim sırada kayan yazı dikdörtgenini görüyorum.

sorumu özetlemek gerekirse, TabItem.Header.Text öğesini StringFormat ile MultiBinding olarak ayarlamak istiyorum.

+3

Bu soruya saatlerce önce neredeyse aynı cevabı verdim. Ama soru silindi ve yeniden yayınlandı mı? – Dabblernl

+0

Bu sorunun önceki sürümünü neden sildiniz? Neden sadece sorduğunuz şeyi değiştirmeyin ve bu etkiyle ilgili yorumlarınızı bırakmayın, o zaman cevapları cevapsız bıraktığınızı biliyorsunuz, ayetler orada çalışıyor mu? –

cevap

61

TabControl, bir ContentTemplate özelliği ve ItemsControl öğesinden devraldığı ItemTemplate öğelerini içerir. ContentTemplate'i, İçerik alanında nelerin gösterildiğini ayırt etmek için kullanırken, Header için şablonu tanımlayan ItemTemplate kullanılır. Ayrıca, ItemSource öğenizdeki her bir öğe otomatik olarak bir TabItem'e sarılacaktır; ItemTemplate'de yeniden oluşturulmasına gerek yoktur, çünkü farkettiğiniz gibi Başlık içinde bir TabItem yerleştirmeye çalışacaktır.

ItemTemplate içinde bir TabItem'i yeniden oluşturmak yerine, Header içeriğinizi ve İçeriğinizi tanımlamak için ContentTemplate öğesini tanımlamak için ItemTemplate öğesini kullanın.

<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> 

İlk paragrafınızda, Başlığın ciltli kısımlarına farklı boyutlar ayarlamak istediğinizi belirtmiştiniz. Bunu yapmak isterseniz, yukarıdaki gibi Metni ayarlamak için tek bir Ciltleme veya Çoklu Ciltleme kullanamazsınız. Bunun yerine, her biri için farklı biçimlendirme ile bunu elde etmek için TextBlock'ları yerleştirebilirsiniz.

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

Bunlar için Stil TargetTypes nedir? TabItem'in buton için olduğunu biliyorum, peki ya sayfa? – Patrick

+0

Bu gerçekten uğraşılması gereken çok zor bir şeydi. +1 –