2010-08-18 4 views
7

Ecco una domanda per principianti su WPF TabControl, TabItem e TabPanel. C'è una domanda correlata su StackOVF con una risposta che ho felicemente utilizzato nella mia app. Ecco un link per la risposta, e il frammento di codice così:Stili WPF per TabControl/TabPanel/TabItem

WPF: Center TabItems in a TabControl

<TabControl> 
    <TabControl.Resources> 
     <Style TargetType="{x:Type TabPanel}"> 
      <Setter Property="HorizontalAlignment" Value="Center" /> 
     </Style> 
    </TabControl.Resources> 

    <TabItem Header="Test 1" /> 
    <TabItem Header="Test 2" /> 
    <TabItem Header="Test 3" /> 
    <TabItem Header="Test 4" /> 
</TabControl> 

Mentre questo è meraviglioso, mi piacerebbe spostare le risorse e roba di stile per una posizione migliore (un foglio di stile o di il simile). Il mio primo tentativo è stato spostare il tag <TabControl.Resources> su <Window.Resources> ma questo non ha funzionato. Ho provato diverse varianti ma non ho potuto farlo funzionare. Ecco un esempio di un tentativo ho un po 'aspettavo di lavorare:

<!-- Doesn't work as expected: --> 
<Window.Resources> 
    <Style TargetType="{x:Type TabPanel}"> 
     <Setter Property="HorizontalAlignment" Value="Center" /> 
    </Style> 
</Window.Resources> 

prenotare online e MSDN non ha aiutato a risolvere il mio problema, ma invece mi ha lasciato con una seconda domanda (legati): ciò che è effettivamente è un TabPanel e in che modo si riferisce a TabControl?

Qualsiasi aiuto e consiglio sarebbe molto apprezzato.

(Modificato:. Commentato in ultimo esempio che il codice non funziona per me)

risposta

9

alt text

TabControl utilizza una classe TabPanel specializzato e non un pannello generico come StackPanel perché se si fa confusione in giro con il TabControl vi renderete conto che il pannello fa abbastanza alcune cose che i pannelli generici non fanno. Uno sta modificando gli elementi di intestazione della scheda in più righe. Un altro è che le righe degli oggetti saranno riorganizzate in modo che l'intestazione tabitem selezionata si trovi sempre nell'ultima riga. Immagino che potrebbe fare ancora di più

Sono abbastanza interessato a sapere perché inserire lo stile nella sezione delle risorse della finestra non funziona. La mia prima reazione è stata che dovrebbe funzionare fino a quando non l'ho provato. Sto aggiungendo questo come risposta perché SO non mi consente di aggiungere un'immagine in un commento.

+0

"La mia prima reazione è stata che dovrebbe funzionare fino a quando non l'ho provato." Ah! Quindi io ** sono ** ancora sano di mente :) Grazie per la spiegazione su TabPanel NVM. Ha senso. Un "indizio" che ho trovato durante la mia indagine è che (se ho capito bene) è che non esiste XAML per TabPanel (sembra). Ad esempio, non è possibile aggiungere un elemento '' '' a TabControl. (Commento modificato) – Jeroen

+0

Un po 'tardi, ma passando per le mie vecchie domande ho visto che hai risposto a una delle mie domande. Credito in cui il credito è dovuto :) – Jeroen

1

avrete probabilmente bisogno di creare un ControlTemplate per fare questo.

Non ho ancora molta familiarità con ControlTemplates. Ho inciso questo esempio da: http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.tabpanel.aspx

<Style TargetType="{x:Type TabControl}"> 
     <Setter Property="OverridesDefaultStyle" Value="True" /> 
     <Setter Property="SnapsToDevicePixels" Value="True" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type TabControl}"> 
        <Grid KeyboardNavigation.TabNavigation="Local"> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="Auto"/> 
          <RowDefinition Height="*"/> 
         </Grid.RowDefinitions> 
         <TabPanel Name="HeaderPanel" 
            Grid.Row="0" 
            Panel.ZIndex="1" 
            Margin="0,0,4,-1" 
            IsItemsHost="True" 
            KeyboardNavigation.TabIndex="1" 
            HorizontalAlignment="Center"/> 
         </Grid> 

       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
+0

Grazie per l'idea Chris. Ho visto esempi come questo, ma questo mi sembra un sacco di codice solo per cambiare una proprietà di layout dei tabheader, poiché ti fa creare l'intero ControlTemplate. Forse un Guru può lanciare una seconda opinione, dicci se questa è la strada da percorrere? – Jeroen

+0

So cosa intendi :) Stavo giocando con il tentativo di cambiare l'aspetto dell'espansore, e non è un processo facile. Quindi spero anche che qualcuno abbia un modo migliore :) – Crispy