2017-09-05 107 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

我試過這段代碼,並且爲我解決了這個問題。感謝這一點,也感謝您的解釋 –