2017-09-05 1 views
0

lorsque j'essaie de définir un BorderBrush différent pour le TextBox lorsqu'il est mis au point en utilisant le style (simplifié) suivant, il ne fonctionne pas.WPF Trigger TextBox BorderBrush ne fonctionne pas

<Style x:Key="{x:Type TextBox}" TargetType="{x:Type TextBox}">   
    <Style.Triggers>    
     <Trigger Property="IsFocused" Value="True"> 
      <Setter Property="BorderBrush" Value="Red" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

Cependant, si au lieu de fixer un autre BorderBrush je tente de par exemple définissez Background (c'est-à-dire <Setter Property="Background" Value="Red" />) cela fonctionne.

J'ai essayé les solutions disant que je devrais essayer de régler la BorderThickness à quelque chose comme 0.99 ou 1.01 comme décrit here et here mais ils ne fonctionnent pas pour moi.

Toute aide est volontiers appréciée.

+1

lire ceci: https://stackoverflow.com/questions/36605387/wpf-textbox-border-style- trigger-isfocused-only-works-if-has-focus-but-not-keybo – tabby

Répondre

4

Qu'est-ce qui se passe est que le TextBoxBase a quelques déclencheurs pour IsFocused, de sorte que votre déclencheur est remplacé par celui par défaut.

Vous devez modifier le modèle TextBoxBase et y mettre votre déclencheur pour obtenir ce que vous voulez:

<TextBox.Style> 
    <Style 
     TargetType="{x:Type TextBox}"> 
     <Setter 
      Property="Template"> 
      <Setter.Value> 
       <ControlTemplate 
        TargetType="{x:Type TextBoxBase}"> 
        <Border 
         x:Name="border" 
         BorderBrush="{TemplateBinding BorderBrush}" 
         BorderThickness="{TemplateBinding BorderThickness}" 
         Background="{TemplateBinding Background}" 
         SnapsToDevicePixels="True"> 
         <ScrollViewer 
          x:Name="PART_ContentHost" 
          Focusable="False" 
          HorizontalScrollBarVisibility="Hidden" 
          VerticalScrollBarVisibility="Hidden" /> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger 
          Property="IsFocused" 
          Value="True"> 
          <Setter 
           Property="BorderBrush" 
           Value="Red" /> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 

    </Style> 
</TextBox.Style> 
+0

J'ai essayé ce code et ça l'a résolu pour moi. Merci pour cela et merci pour l'explication –