azamsharp
azamsharp

Reputation: 20068

Not able to Style my WPF Controls

I am going crazy here! What am I missing and why it is not styling anything:

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

    <TextBox Width="100" Style="{StaticResource textBoxStyle}" Height="20" Background="Yellow" ></TextBox>

The above code does not do anything. It does not highlight the TextBox control!

Upvotes: 1

Views: 120

Answers (2)

arconaut
arconaut

Reputation: 3285

Define your Style before the TextBox or use DynamicResource instead of StaticResource

Upvotes: 0

itowlson
itowlson

Reputation: 74802

This occurs because local values override style values. (Properties set directly on an element have very high precedence.) You are setting Background directly on the TextBox, so WPF is going, "Well, he normally wants textBoxStyle backgrounds to be Red when focused, but for this particular TextBox, he's said he specifically wants Background to be Yellow, so Yellow it is."

So the fix is to move the Yellow background to be part of the Style:

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

and remove it from the TextBox:

<TextBox Width="100" Style="{StaticResource textBoxStyle}" Height="20" />

Upvotes: 4

Related Questions