2011-08-02 1 views
0

Je veux styler le ToggleButton pour changer de couleur lorsque j'appuie dessus, et garder cette couleur jusqu'à ce que je l'enfonce à nouveau. Actuellement, le survol de la souris change la couleur après qu'il a été pressé et la souris quitte le bouton bascule. J'ai enlevé le changement de couleur mouseover et cela m'a permis de définir la couleur dans l'état Checked, mais je ne veux pas perdre l'effet mouseover. Y a-t-il un moyen d'avoir les deux? J'ai créé mon propre expandeur, m'enseignant à propos de la création de contrôles, mais je ne vois pas comment avoir le mouseover et une couleur pressée qui statiques, le mouseover dans mon exemple ne devrait être réinitialisé que si le bouton n'était pas cliqué/coché. Je travaille hors de ce style ToggleButton: http://msdn.microsoft.com/en-us/library/cc296245(v=vs.95).aspxToggleButton MouseOver Vérifié Pressé Question

+0

Pouvez-vous décrire l'effet que vous voulez réellement? Le modèle par défaut renvoie l'état vérifié en utilisant la direction du dégradé. Si vous n'utilisez pas cette apparence que vous voulez quand le bouton est à la fois vérifié et la souris est dessus? – AnthonyWJones

+1

Vous rencontrez le même problème que dans cette question: http://stackoverflow.com/questions/3596026/custom-styled-listbox-how-can-i-keep-the-style-for-a-selected-item/ 3596570 # 3596570 – Denis

Répondre

2

This MSDN Link dans les revendications la section Remarques:

auteurs ControlTemplate objets de VisualState à un VisualStateGroup dans un ControlTemplate pour spécifier le comportement visuel du contrôle. Vous mettez des états mutuellement exclusifs dans le même VisualStateGroup. Par exemple, CheckBox a deux objets VisualStateGroup. L'un contient les états Normal, MouseOver, Pressed et Disabled. L'autre contient les états Checked, UnChecked et Indeterminate. Le CheckBox peut être dans les états MouseOver et UnChecked en même temps, mais il ne peut pas être dans les états MouseOver et Pressed en même temps. Je suis assez nouveau pour Silverlight, mais il semblerait que vous deviez utiliser un 2ème contrôle comme une bordure ou un rectangle, pas sûr si c'est une option, mais vous pouvez également le configurer pour changer un pinceau de bordure Couleur sur la souris.

1

L'ordre de vos déclencheurs est important. Ce style fonctionne comme vous l'avez spécifié.

<Style x:Key="{x:Type ToggleButton}" TargetType="{x:Type ToggleButton}"> 
    <Setter Property="Foreground" Value="White" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ToggleButton}"> 
       <Border Name="Border" BorderThickness="1" Background="Gray" BorderBrush="Gray"> 
        <ContentPresenter Name="ContentHost" Margin="8,3" HorizontalAlignment="Center" VerticalAlignment="Center" RecognizesAccessKey="true" /> 
       </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsMouseOver" Value="true"> 
          <Setter TargetName="Border" Property="Background" Value="Yellow" /> 
         <Setter TargetName="Border" Property="BorderBrush" Value="Yellow" /> 
         </Trigger> 
         <Trigger Property="IsChecked" Value="True"> 
          <Setter TargetName="Border" Property="Background" Value="Red" /> 
          <Setter TargetName="Border" Property="BorderBrush" Value="Red" /> 
         </Trigger> 
         <Trigger Property="IsPressed" Value="true"> 
         <Setter TargetName="Border" Property="Background" Value="Green" /> 
         <Setter TargetName="Border" Property="BorderBrush" Value="Green" /> 
         </Trigger> 
         <Trigger Property="IsEnabled" Value="false"> 
          <Setter TargetName="Border" Property="Opacity" Value="0.25" /> 
         </Trigger> 
        </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

Cela fonctionnerait-il également dans SilverLight? Ou juste WPF? – Terco

+0

@Wallstreet J'apprécierais également si vous avez développé en quoi l'ordre des déclencheurs est important. – StephenT

+0

@Bob: Non c'est purement une réponse WPF, ne fonctionne pas dans Silverlight. – AnthonyWJones