2016-07-06 4 views
3

Ist es möglich, eine Art Basis-Expander-Stil zu erstellen und die Hintergrundfarbe des Headers in einem abgeleiteten Stil zu überschreiben? In meiner Anwendung verwende ich Expander sehr und ich möchte die Hintergrundfarbe des Headers ändern. Ich weiß, ich könnte einfach kopieren & meinen Stil einfügen und bearbeiten Sie die Farbe, aber es wäre schöner, nur einen neuen Stil basierend auf dem "Basis-Stil" zu erstellen und die Hintergrundfarbe des Headers festlegen. Aber ich weiß nicht, wie man auf diese Farbe zugreifen kann. Es ist die Farbe dieser Zeile: unten möchte ich ändern (der Rahmen in der Kopfzeile): Border Name = "Rahmen" ... Ich kann nicht auf "Rahmen" im Setter des abgeleiteten Stils zugreifen ...Base Expander Style, Override-Header-Farbe

Dies ist mein (Basis) Stil:

<Style TargetType="Expander" x:Key="ExpanderStyle"> 
    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}"/> 
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextColor}}"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <!-- Control template for expander --> 
      <ControlTemplate TargetType="Expander" x:Name="exp"> 
       <Grid> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto"/> 
         <RowDefinition Name="ContentRow" Height="0"/> 
        </Grid.RowDefinitions> 
        <Border Name="border" Grid.Row="0" Background="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}" BorderThickness="1" CornerRadius="4,4,0,0" > 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="*" /> 
           <ColumnDefinition Width="20" /> 
          </Grid.ColumnDefinitions> 
          <ToggleButton x:Name="tb" FontFamily="Marlett" FontSize="9.75" Background="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}" Foreground="Black" Grid.Column="1" Content="u" IsChecked="{Binding Path=IsExpanded,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}" /> 
          <ContentPresenter x:Name="HeaderContent" Grid.Column="0" Margin="4" ContentSource="Header" RecognizesAccessKey="True" /> 
         </Grid> 
        </Border> 
        <Border x:Name="Content" Grid.Row="1" BorderThickness="1,0,1,1" CornerRadius="0,0,4,4" > 
         <ContentPresenter Margin="4" /> 
        </Border> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsExpanded" Value="True"> 
         <Setter TargetName="ContentRow" Property="Height" Value="{Binding ElementName=Content,Path=Height}" /> 
         <Setter Property="Content" TargetName="tb" Value="t"></Setter> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

ich möchte so etwas wie dies tun:

<Style x:Key="ExpanderStyleRed" BasedOn="{StaticResource ExpanderStyle}" TargetType="Expander"> 
      <Setter Property="???" Value="Red"/> 
<Style> 

Antwort

1

Verwendung TemplateBinding:

 <Style TargetType="Expander" x:Key="ExpanderStyle"> 
     <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}"/> 
     <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextColor}}"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <!-- Control template for expander --> 
       <ControlTemplate TargetType="Expander" x:Name="exp"> 
        <Grid> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="Auto"/> 
          <RowDefinition Name="ContentRow" Height="0"/> 
         </Grid.RowDefinitions> 
         <Border Name="border" Grid.Row="0" Background="{TemplateBinding Background}" BorderThickness="1" CornerRadius="4,4,0,0" > 
          <Grid> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="*" /> 
            <ColumnDefinition Width="20" /> 
           </Grid.ColumnDefinitions> 
           <ToggleButton x:Name="tb" FontFamily="Marlett" FontSize="9.75" Background="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}" Foreground="Black" Grid.Column="1" Content="u" IsChecked="{Binding Path=IsExpanded,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}" /> 
           <ContentPresenter x:Name="HeaderContent" Grid.Column="0" Margin="4" ContentSource="Header" RecognizesAccessKey="True" /> 
          </Grid> 
         </Border> 
         <Border x:Name="Content" Grid.Row="1" BorderThickness="1,0,1,1" CornerRadius="0,0,4,4" > 
          <ContentPresenter Margin="4" /> 
         </Border> 
        </Grid> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsExpanded" Value="True"> 
          <Setter TargetName="ContentRow" Property="Height" Value="{Binding ElementName=Content,Path=Height}" /> 
          <Setter Property="Content" TargetName="tb" Value="t"></Setter> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

    <Style x:Key="ExpanderStyleRed" BasedOn="{StaticResource ExpanderStyle}" TargetType="Expander"> 
     <Setter Property="Background" Value="#2fff0000"/> 
    </Style> 

Und dann:

<Grid> 

    <Expander x:Name="expander1" Style="{DynamicResource ExpanderStyle}" Header="Expander" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="7,10,0,0" Height="108"> 
     <TextBlock Width="250" Height="150" TextWrapping="Wrap"> 
      asklsaklsa saaskklsaklas alsaklalkjd 
      asklsaklsaklsa saklsaklsakl jsajkjska 
      saklsaklsakl sasa 
     </TextBlock> 
    </Expander> 

    <Expander x:Name="expander2" Style="{DynamicResource ExpanderStyleRed}" Header="Expander" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="12,126,0,0" Height="133"> 
     <TextBlock Width="250" Height="150" TextWrapping="Wrap"> 
      asklsaklsa saaskklsaklas alsaklalkjd 
      asklsaklsaklsa saklsaklsakl jsajkjska 
      saklsaklsakl sasa 
     </TextBlock> 
    </Expander> 

</Grid> 

enter image description here