2009-12-08 9 views
23

Come si imposta TabItem.Header sui collegamenti presi da pochi campi, ogni associazione mostrata in una dimensione diversa, il tutto nel posto del testo originale dell'intestazione ; senza sovrascrivere lo stile e il comportamento predefiniti dell'intestazione: ho solo bisogno del testo.TabControl.ItemTemplate: imposta TabItem.Header.Text su MultiBinding con StringFormat

Ho provato a impostare il suo modello ma poi crea un rettangolo che contiene i controlli interni, e questo rettangolo non risponde ai clic dell'utente, e ha anche lo stile di controllo, voglio che questi controlli siano invisibili, solo il suo il testo dovrebbe essere visibile.

ho provato la seguente:

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

Ma non mostra nulla.

Ho anche provato a impostare l'HeaderTemplate su un DataTemplate, ma quello che succede è che DataTemplate sovrascrive lo stile TabItem e quando faccio clic sul testo non va alla scheda cliccata, inoltre, le schede non selezionate sembrano molto divertente, vedo il rettangolo del testo fluttuare, mentre voglio che sia trasparente.

Quindi, per riassumere la mia domanda, voglio impostare TabItem.Header.Text a MultiBinding con StringFormat.

+3

Ho dato quasi la stessa risposta a questa domanda ore prima. Ma sembra che la domanda sia stata cancellata e ripubblicata? – Dabblernl

+0

Perché hai eliminato la versione precedente di questa domanda? Perché non solo cambiare ciò che chiedevi e lasciare commenti in tal senso, quindi lascia che le risposte sappiano di aver mancato il segno, mentre il verso trasgredisce il lavoro? –

risposta

61

Il TabControl contiene una proprietà ContentTemplate e ItemTemplate che eredita da ItemsControl. Usa ContentTemplate per differenziare ciò che viene visualizzato nell'area Contenuto mentre ItemTemplate che definisce il modello per l'intestazione. Inoltre, ogni oggetto proveniente da ItemSource verrà automaticamente incluso in un oggetto TabItem; non ha bisogno di essere ricreato nel ItemTemplate, in quanto questo tenterà di posizionare un TabItem all'interno dell'intestazione come si sta notando.

Invece di ricreare un TabItem all'interno di ItemTemplate, utilizzare ItemTemplate per definire il contenuto dell'intestazione e ContentTemplate per definire il contenuto.

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

Nel tuo primo paragrafo hai menzionato di voler impostare diverse dimensioni sulle porzioni rilegate dell'intestazione. Se vuoi farlo, non sarai in grado di utilizzare un singolo Binding o MultiBinding per impostare il testo come sopra. Invece è possibile nidificare TextBlocks per ottenere questo con una formattazione diversa per ciascuno.

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

Quali sono gli Style TargetTypes per questi? So che TabItem è per il pulsante, ma per quanto riguarda la pagina? – Patrick

+0

Questa è stata davvero una cosa molto difficile da affrontare. +1 –