2010-09-20 8 views
1

J'ai créé le style d'un bouton à bascule, défini ci-dessous:Héritage/prépondérants styles WPF

<Style TargetType="{x:Type ToggleButton}"> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type ToggleButton}"> 
     <Border HorizontalAlignment="Center" VerticalAlignment="Center" x:Name="border" Padding="5,5,5,5" CornerRadius="5" Background="#FFBFACAC" BorderBrush="#FF000000" BorderThickness="1,1,1,1" SnapsToDevicePixels="True"> 
      <ContentPresenter x:Name="contentPresenter"/> 
     </Border> 
     <ControlTemplate.Triggers> 
      <Trigger Property="IsChecked" Value="true"> 
      <Setter Property="Foreground" Value="White"/> 
      <Setter Property="Background" TargetName="border"> 
       <Setter.Value> 
       <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
        <GradientStop Color="#FF36587C" Offset="0.5"/> 
        <GradientStop Color="#FF122F53" Offset="1"/> 
       </LinearGradientBrush> 
       </Setter.Value> 
      </Setter> 
      </Trigger> 
      <Trigger Property="IsChecked" Value="false"> 
      <Setter Property="Foreground" Value="Black"/> 
      <Setter Property="Background" TargetName="border"> 
       <Setter.Value> 
       <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
        <GradientStop Color="LightGray" Offset="0.5"/> 
        <GradientStop Color="White" Offset="1"/> 
       </LinearGradientBrush> 
       </Setter.Value> 
      </Setter> 
      </Trigger> 
     </ControlTemplate.Triggers> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

J'ai des boutons à bascule multiples mais je voudrais un moyen de changer leur rayon d'angle de la frontière. Par exemple, je voudrais arrondir les boutons dont seuls les coins droits sont arrondis, ou certains sans arrondir les coins. Dois-je recréer le style entier pour chaque type d'arrondi dont j'ai besoin, où la seule différence dans chaque style serait la ligne suivante?

<Border HorizontalAlignment="Center" VerticalAlignment="Center" x:Name="border" Padding="5,5,5,5" CornerRadius="5" Background="#FFBFACAC" BorderBrush="#FF000000" BorderThickness="1,1,1,1" SnapsToDevicePixels="True"> 

Depuis l'arrondissement de coin fait partie du modèle de contrôle, je ne pense pas que je peux changer en quelque sorte juste une partie du modèle dans un nouveau style sans inclure tout cela, mais je ne suis pas sûr.

Merci.

Répondre

0

L'alternative est de créer un contrôle personnalisé, héritant de ToggleButton.

Vous pouvez alors avoir une propriété appelée CornerRadius et, dans le modèle générique de la classe, faire un TemplateBinding à cette propriété.

Si vous envisagez d'utiliser «beaucoup» dans votre projet, avec un tas de variantes, un contrôle personnalisé peut être la solution. Cela vous permettra également d'étendre le nombre de propriétés plus tard, au cas où vous voudriez faire d'autres personnalisations.

2

Vous devrez créer le style entier pour changer une partie du modèle de contrôle. Je suggère de mettre ceci dans un dictionnaire de ressources que vous pouvez fusionner en tant que partie de votre fenêtre pour garder la fenêtre (ou le contrôle) XAML plus propre. Mélangez - ajoutez le contrôle que vous voulez et faites un clic droit dessus, puis choisissez «modifier le modèle» pour éditer une copie du modèle.

Questions connexes