Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to style a WPF Expander Header?

I would like to apply a style on a WPF Expander Header. In the following XAML I have an Expander but the style is for all of it not just for the header.

Thanks.

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="640" >     <StackPanel>         <StackPanel.Resources>             <Style TargetType="Expander">                 <Style.Resources>                     <LinearGradientBrush x:Key="BackBrush" StartPoint="0.5,0" EndPoint="0.5,1">                         <GradientStop Color="#EF3132" Offset="0.1" />                         <GradientStop Color="#D62B2B" Offset="0.9" />                     </LinearGradientBrush>                 </Style.Resources>                 <Setter Property="Background" Value="{StaticResource BackBrush}"/>             </Style>         </StackPanel.Resources>         <Expander>             <StackPanel>                 <TextBlock>Bike</TextBlock>                 <TextBlock>Car</TextBlock>                 <TextBlock>Truck</TextBlock>             </StackPanel>         </Expander>     </StackPanel> </Page> 
like image 858
Vasile Tomoiaga Avatar asked Mar 19 '09 09:03

Vasile Tomoiaga


People also ask

How do I change the Expander icon in WPF?

You need to change the Template , you can base it on the existing template though. H.B. so even if i just wanted to change the foreground of the icon to white, i would still have to change the whole template?


1 Answers

I have combined some XAML from Josh Smith and MSDN and came up with a solution. Indeed, the control (al least the header) must be retemplated.

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="400">     <StackPanel>         <StackPanel.Resources>              <Style TargetType="Border" x:Key="RacePitBorderStyle" >                 <Style.Resources>                     <LinearGradientBrush x:Key="BackBrush" StartPoint="0.5,0" EndPoint="0.5,1">                         <GradientStop Color="#EF3132" Offset="0.1" />                         <GradientStop Color="#D62B2B" Offset="0.9" />                     </LinearGradientBrush>                 </Style.Resources>                 <Setter Property="Background" Value="{StaticResource BackBrush}"/>             </Style>              <DataTemplate x:Key="titleText">                 <Border Style="{StaticResource RacePitBorderStyle}" Height="24">                     <TextBlock Text="{Binding}"                          Margin="4 0"                         VerticalAlignment="Center"                         Foreground="White"                         FontSize="11"                          FontWeight="Normal"                         Width="{Binding                         RelativeSource={RelativeSource                         Mode=FindAncestor,                         AncestorType={x:Type Expander}},                         Path=ActualWidth}"                         TextWrapping="Wrap"/>                 </Border>             </DataTemplate>              <Style TargetType="{x:Type Expander}">                 <Setter Property="HeaderTemplate" Value="{StaticResource titleText}"/>             </Style>          </StackPanel.Resources>          <Expander Name="hcontCtrl" Header="This is the header.">             <StackPanel>                 <TextBox>This is a textbox</TextBox>                 <Button>A button</Button>             </StackPanel>         </Expander>      </StackPanel> </Page> 
like image 68
Vasile Tomoiaga Avatar answered Sep 24 '22 06:09

Vasile Tomoiaga