2016-12-13 5 views
1

Lorsque j'ajoute ce controltemplate, mes cases à cocher disparaissent et seul le texte de la case à cocher est affiché. Et quand la souris est terminée, le fond de texte devient rouge, comment puis-je obtenir mon fond de case à cocher rouge lorsque la souris est terminée?Checkbox IsMouseOver ne fonctionne pas

<Style TargetType="CheckBox" x:Key="Checkbox"> 
    <Setter Property="BorderThickness"   Value="2" /> 
    <Setter Property="VerticalAlignment"  Value="Top" /> 
    <Setter Property="Margin"     Value="20,15,0,0" /> 
    <Setter Property="FontFamily"    Value="/Resources/Fonts/Source Sans Pro/#Source Sans Pro" /> 
    <Setter Property="FontSize"     Value="14" /> 
    <Setter Property="HorizontalAlignment"  Value="Left" /> 
    <Setter Property="Foreground"    Value="{DynamicResource CheckboxForegroundColor}" /> 
    <Setter Property="Background"    Value="{DynamicResource CheckboxBackgroundColor}" /> 
    <Setter Property="BorderBrush"    Value="{DynamicResource CheckboxBorderbrushColor}"/> 


    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type CheckBox}"> 
       <CheckBox Background="{TemplateBinding Background}" > 
        <ContentPresenter /> 
       </CheckBox> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Background" Value="Red"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
+0

mettre la gâchette comme Style.Triggers au lieu de ControlTemplate.Triggers – nkoniishvt

+0

je reçois Le membre « déclencheurs » n'est pas acceciable ou recongnigzed? –

+0

nkoniishvt

Répondre

0

Cela fonctionne pour certaines propriétés (essayez FontSize, par exemple), mais pas pour d'autres. Le modèle par défaut pour le CheckBox a ses propres déclencheurs, et ils ne dérangent pas avec des choses telles que TemplateBinding s.

This post vous indique comment extraire le modèle par défaut pour un ComboBox. Voici un extrait qui montre votre problème:

<ControlTemplate.Triggers> 
    ... 
    <Trigger Property="IsMouseOver" Value="true"> 
     <Setter 
      Property="Background" 
      TargetName="checkBoxBorder" 
      Value="{StaticResource OptionMark.MouseOver.Background}"/> 
     ... 
    </Trigger> 
    ... 
</ControlTemplate.Triggers> 

Votre meilleur pari est probablement de remplacer l'ensemble du modèle. Heureusement, il est trop complexe ...


  1. Retirez votre propre modèle.
  2. Follow the steps outlined in the post I linked to. Cela devrait vous donner une copie du modèle par défaut CheckBox.
  3. Modifiez cette copie. En particulier, le déclencheur IsMouseOver que j'ai extrait: Remplacez {StaticResource OptionMark.MouseOver.Background} par Red.

Si ce ne sait pas encore, see this related post.

+0

Pouvez-vous expliquer s'il vous plaît, semble que j'ai déjà fait ce que vous avez fait? Désolé, mais im débutant dans xaml –

+0

Merci beaucoup a Petter !, j'ai dû copier le modèle de case à cocher par défaut pour le faire fonctionner. –

+0

Est-ce que je fais la même chose avec un expandeur? Mon bouton expander blanc rond ne montre pas dans mon OS. Vous connaissez des solutions? @petter –