2017-09-05 76 views
0

当我尝试为TextBox设置不同的BorderBrush时,它使用以下(简化)样式进行聚焦时不起作用。WPF Trigger TextBox BorderBrush不能正常工作

<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> 

但是,如果不是设定不同的BorderBrush,我试着例如设置Background(即<Setter Property="Background" Value="Red" />)它确实有效。

我试过的解决方案,说我应该尝试BorderThickness设定成类似0.991.01描述herehere但他们没有为我工作。

任何帮助很乐意欣赏。

+1

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

回答

4

发生什么事是TextBoxBase有一些触发器IsFocused,所以你的触发器被默认的触发器覆盖。

您应该修改TextBoxBase模板,并把你的触发器有达到你想要的东西:

<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

我试过这段代码,并且为我解决了这个问题。感谢这一点,也感谢您的解释 –