2017-02-02 15 views
1

必要なもの:テキストボックスにフォーカスがあるときに境界線の色を黄色に変更します。Wpfテキストボックスのフォーカスされた境界線の色を変更します。GotFocus()

<Window.Resources> 
    <Style TargetType="TextBox"> 
     <Style.Triggers> 
      <Trigger Property="IsFocused" Value="True"> 
       <Setter Property="BorderBrush" Value="Yellow"></Setter> 
       <Setter Property="BorderThickness" Value="1"></Setter> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 

ない喜び:私が試した何

。国境が青く残っている理由を理解できません。 これは似ていますが、How to change the color of the Border of a TextBox when it has focus?の重複はありません。

答えて

7

TextBoxのコントロールテンプレートを変更する必要があります。スタイルにトリガを追加するだけでは不十分です。これはうまくいくはずです:

<Style TargetType="TextBox"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type TextBox}"> 
       <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="IsEnabled" Value="false"> 
         <Setter Property="Opacity" TargetName="border" Value="0.56"/> 
        </Trigger> 
        <Trigger Property="IsMouseOver" Value="true"> 
         <Setter Property="BorderBrush" TargetName="border" Value="#FF7EB4EA"/> 
        </Trigger> 
        <Trigger Property="IsFocused" Value="true"> 
         <Setter Property="BorderBrush" TargetName="border" Value="Yellow"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

すごい!今、私が尋ねることができるなら、どういうわけか/なぜこれが働き、私のコードはどういうものなのかを説明してください。 #KnowingIsHalfTheBattle - 私は以前にコントロールテンプレートを試しましたが、すべてのスタイルを削除してテキストボックス全体を削除するだけで成功しました。 : -/ – DrDamnit

+0

TextBoxの既定のコントロールテンプレートで、BorderBrushプロパティをハードコードされたブラシ値に設定するIsKeyboardFocusedプロパティのDataTriggerが定義されているため、コードが機能しません。そのため、テンプレート全体をオーバーライドする必要があります。 – mm8

+1

Upvoted。ありがとう! – DrDamnit

関連する問題