使用一种方法wpf为多个文本框着色

时间:2017-10-11 23:00:43

标签: c# .net wpf visual-studio

我有一个方法可以为焦点上的文本框(Enter)

的背景着色
 private void onEnter_ColourChange(object sender, EventArgs e)
    {
        this.BackColor = Color.White;
    }
但是,这并不起作用。我检查了这个answer,但我得到了一个N​​ullReferenceException。

基本上,我希望在文本框处于焦点时使用一种方法为多个文本框着色。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

首先:TextBox只有属性Background而不是BackColor!

如果你想改变焦点TextBox的颜色,一个简单的方法是使用带触发器的Style。

<Window.Resources>
    <Style TargetType="TextBox" x:Key="TextBoxFocusBackgroundStyle" BasedOn="{StaticResource {x:Type TextBox}}">
        <Style.Triggers>
            <Trigger Property="IsFocused" Value="true" >
                <Setter Property="Background" Value="Brown" />
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

如您所见,Trigger监视属性IsFocused。如果TextBox获得了Focus(因此IsFocused更改为true),则Background将为棕色。

使用此样式:

<StackPanel>
    <TextBox Text="Peter" Style="{StaticResource TextBoxFocusBackgroundStyle}"/>
    <TextBox Text="Laszlo" Style="{StaticResource TextBoxFocusBackgroundStyle}"/>
    <TextBox Text="Julia" Style="{StaticResource TextBoxFocusBackgroundStyle}"/>
    <TextBox Text="Romeo" Style="{StaticResource TextBoxFocusBackgroundStyle}"/>
</StackPanel>

如果您已经有TextBox的样式,则应在BasedOn属性中使用该样式。