2017-07-04 6 views
0

J'ai défini un style pour mon bouton:style ne pas être appliquée à bouton WPF de la souris

<Style x:Key="MyStyle" TargetType="{x:Type Button}"> 

    <Setter Property="BorderBrush" Value="Transparent"/> 
    <Setter Property="BorderThickness" Value="0 0 0 3"/> 

    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="BorderBrush" Value="Orange" /> 
     </Trigger> 
     <Trigger Property="IsPressed" Value="True"> 
      <Setter Property="BorderBrush" Value="Red" /> 
     </Trigger>   
    </Style.Triggers> 

</Style> 

Maintenant, je l'applique au bouton WPF comme ci-dessous:

<Button> 
    <Button.Style> 
     <Style TargetType="Button" BasedOn="{StaticResource MyStyle}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate> 
         <StackPanel Orientation="Vertical"> 
          <Image Height="20" Width="20" Stretch="UniformToFill" Source="./Resources/Add.png"/> 
          <Label HorizontalAlignment="Center">Add</Label> 
         </StackPanel> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
      <Style.Triggers> 
       <Trigger Property="IsPressed" Value="True"> 
        <Setter Property="BorderBrush" Value="Green" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </Button.Style> 
</Button> 

Cela montre un bouton avec une image et une étiquette sous l'image. Sur la souris, la bordure du bouton en bas est affichée avec la couleur Orange et à la souris, elle change la bordure inférieure en couleur verte (notez que la couleur initiale est écrasée.) J'ai un autre bouton dont je veux montrer la bordure inférieure rouge et non vert sur la souris pressée).

Mon problème est que la bordure inférieure du bouton n'est pas affichée en orange sur la souris.

MISE À JOUR:

Comme Mishka dit j'ai oublié la frontière ... voir maintenant:

<Button> 
    <Button.Style> 
     <Style TargetType="Button" BasedOn="{StaticResource MyStyle}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate> 
         <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"> 
         <StackPanel Orientation="Vertical"> 
          <Image Height="20" Width="20" Stretch="UniformToFill" Source="./Resources/Add.png"/> 
          <Label HorizontalAlignment="Center">Add</Label> 
         </StackPanel> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
      <Style.Triggers> 
       <Trigger Property="IsPressed" Value="True"> 
        <Setter Property="BorderBrush" Value="Green" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </Button.Style> 
</Button> 
+1

Vous devriez probablement un livre ou tutoriel en ligne sur tous ces styles et de Bases du modèle [Styling and Templating] (https://docs.microsoft.com/en-us/dotnet/framework/wpf/controls/styling-and-templating) sur MS Docs peut être un bon point de départ. – Clemens

+0

@Clemens Merci Clemens, je pense que j'en ai besoin. J'irais regarder. Désolé, je suis très très nouveau sur WPF .... :( – user1624552

Répondre

1

Aucun objet (comme 'Border') existe dans votre ControlTemplate pour recevoir que la valeur de BorderBrush.

Vous devez vous envelopper des contrôles avec une bordure et ont sa valeur comme BorderBrush et BorderThickness, TemplateBinding aux propriétés sur le bouton:

<Border BorderBrush="{TemplateBinding BorderBrush}"> 
</Border> 
+0

Vous avez raison, j'ai oublié ..... Voir ma mise à jour. – user1624552