2011-09-06 10 views
7

Ho un controllo scheda WPF. ma vorrei cambiare lo stile della voce della scheda. Lo stile predefinito è quadrato. Ho bisogno di renderlo come una lista chevron. Ogni blocco in quello come esagono.Come creare un controllo scheda WPF come elenco chevron?

EDIT: Please see the attached image

+0

Non è molto chiaro quello che vuoi ... potresti pubblicare uno schizzo? –

+0

Si prega di vedere l'immagine allegata. – Relativity

risposta

14

Ecco un rapido esempio fatto con Kaxaml:

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Page.Resources> 
    <Style x:Key="chevronTabItemStyle" TargetType="{x:Type TabItem}"> 
     <Setter Property="Foreground" Value="White" /> 
     <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type TabItem}"> 
      <StackPanel Orientation="Horizontal" Margin="0,0,-7,0" Height="30"> 
       <Path Data="M0,0 10,0 10,30 0,30 10,15" 
        Fill="{TemplateBinding Background}"/> 
       <Grid> 
       <Rectangle Fill="{TemplateBinding Background}" /> 
       <TextBlock Text="{TemplateBinding Header}" Margin="10,5" VerticalAlignment="Center" /> 
       </Grid> 
       <Path Data="M0,0 10,15 0,30" 
        Fill="{TemplateBinding Background}" />     
      </StackPanel> 
      </ControlTemplate> 
     </Setter.Value> 
     </Setter> 
    </Style> 
    </Page.Resources> 
    <Grid> 
    <TabControl ItemContainerStyle="{StaticResource chevronTabItemStyle}"> 
     <TabItem Header="Design" Background="DarkSlateBlue" /> 
     <TabItem Header="Plan" Background="DarkCyan" /> 
     <TabItem Header="Build" Background="LightSkyBlue" /> 
     <TabItem Header="Test" Background="SandyBrown" /> 
     <TabItem Header="Evaluate" Background="SteelBlue" /> 
    </TabControl> 
    </Grid> 
</Page> 

Sarà probabilmente necessario modificare alcune proprietà, ma è più o meno quello che hai descritto ...

enter image description here

+0

+1, risposta molto bella! –

+0

Wow, molto bello - questo sembra perfetto per quello che sto cercando .. grazie per aver fornito una base davvero solida! – Steoates

3

Thomas Levesque la tua risposta è bellissima!

C'è un piccolo problema con primo piano colore, spostare proprietà in TextBlock evitare che tutto scheda da colorare Bianco

In questo modo siamo in grado di cambiare il colore della testata se le proprietà IsEnable o selezionati sono valutati.

<Style x:Key="TestNewTabStyle" TargetType="{x:Type TabItem}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type TabItem}">       
        <StackPanel Orientation="Horizontal" Margin="0,0,-7,0" Height="30"> 
         <Path Data="M0,0 10,0 10,30 0,30 10,15" Fill="{TemplateBinding Background}"/> 
         <Grid > 
          <Rectangle Fill="{TemplateBinding Background}" /> 
          <TextBlock Name="HeaderArrow" Text="{TemplateBinding Header}" Margin="15,5" VerticalAlignment="Center" Foreground="White"**/> 
         </Grid> 
         <Path Data="M0,0 10,15 0,30" Fill="{TemplateBinding Background}" /> 
        </StackPanel> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsSelected" Value="True"> 
          <Setter TargetName="HeaderArrow" Property="FontWeight" Value="Bold" /> 
          <Setter TargetName="HeaderArrow" Property="Foreground" Value="Yellow" /> 
         </Trigger> 
         <Trigger Property="IsEnabled" Value="False"> 
          <Setter TargetName="HeaderArrow" Property="Foreground" Value="DarkGray" /> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
Problemi correlati