ExpanderStyle.xaml

89 lines | 4.895 kB Blame History Raw Download
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="Colors.xaml" />
    </ResourceDictionary.MergedDictionaries>

    <Style x:Key="AdvancedExpander" TargetType="{x:Type Expander}">

        <Style.Resources>
            <ControlTemplate x:Key="SimpleExpanderButtonTemp" TargetType="{x:Type ToggleButton}">
                <Border x:Name="ExpanderButtonBorder"
                        Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}"
                        Padding="{TemplateBinding Padding}">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <Rectangle Fill="Transparent" Grid.ColumnSpan="2"/>
                        <Ellipse Name="Circle"
                                    Grid.Column="0"
                                    Stroke="{StaticResource DarkGreen}"
                                    StrokeThickness="1.5"
                                    Width="20"
                                    Height="20"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"/>
                        <Path x:Name="Sign"
                                  Grid.Column="0"
                                  Data="M 0,5 H 10 M 5,0 V 10 Z"
                                  Stroke="{StaticResource DarkGreen}"
                                  Width="10"
                                  Height="10"
                                  StrokeThickness="2"
                                  HorizontalAlignment="Center"
                                  VerticalAlignment="Center"
                                  RenderTransformOrigin="0.5,0.5">
                            <Path.RenderTransform>
                                <RotateTransform Angle="0"/>
                            </Path.RenderTransform>
                        </Path>
                        <ContentPresenter x:Name="HeaderContent" Grid.Column="1" Margin="4,0,0,0" ContentSource="Content" VerticalAlignment="Center"/>
                    </Grid>
                </Border>
                <ControlTemplate.Triggers>
                    <!--Change the sign to minus when toggled-->
                    <Trigger Property="IsChecked" Value="True">
                        <Setter Property="Data" TargetName="Sign" Value="M 0,5 H 10 Z"/>
                    </Trigger>
                    <!-- MouseOver, Pressed behaviours-->
                    <Trigger Property="IsMouseOver" Value="true">
                        <Setter Property="Stroke" Value="{StaticResource Yellow}" TargetName="Circle"/>
                        <Setter Property="Stroke" Value="{StaticResource Yellow}" TargetName="Sign"/>
                    </Trigger>
                    <Trigger Property="IsPressed" Value="true">
                        <Setter Property="Stroke" Value="{StaticResource LightGreen}" TargetName="Circle"/>
                        <Setter Property="StrokeThickness" Value="1.5" TargetName="Circle"/>
                        <Setter Property="Stroke" Value="{StaticResource LightGreen}" TargetName="Sign"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Style.Resources>



        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Expander}">
                    <DockPanel>
                        <ToggleButton x:Name="ExpanderButton" DockPanel.Dock="Top" 
                                                  Template="{StaticResource SimpleExpanderButtonTemp}"
                                                  Content="{TemplateBinding Header}"
                                                  IsChecked="{Binding Path=IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" 
                                                  OverridesDefaultStyle="True"
                                                  Padding="1.5,0"/>
                        <ContentPresenter x:Name="ExpanderContent" Visibility="Collapsed" DockPanel.Dock="Bottom"/>
                    </DockPanel>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsExpanded" Value="True">
                            <Setter TargetName="ExpanderContent" Property="Visibility" Value="Visible"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>