如何在应用程序中更改所有TextBox的前景颜色

时间:2014-06-18 08:43:42

标签: wpf

在我的应用程序(C#WPF)中,我有更多网格中的大约30或40个文本框,我想在循环中更改它们的前景色。我使用下面的代码,它的工作原理。但我想将它用于整个项目,而不仅仅是用于混凝土网格

xaml代码

<grid x:Name"stk">
    .... some textBoxes ...
</grid>

* .cs code

foreach (TextBox item in this.stk.Children.OfType<TextBox>())
{
    if (item.Name.StartsWith("txt"))
    item.Foreground = Brushes.Orange;
}

所以,当我有更多的网格时,我必须将x:Name="..."放入每个网格中,这意味着更多的foreach循环。

5 个答案:

答案 0 :(得分:3)

更简单的方式

定义样式, TargetType设置为Textbox且没有键。这样,此样式将应用于应用程序中的所有文本框,而无需为每个文本框绑定样式或前景。

<Application.Resources>
    <SolidColorBrush  Color="Red" x:Key="txtColor" />

    <Style TargetType="TextBox">
        <Setter Property="Foreground" Value="{DynamicResource txtColor}" />
    </Style>
</Application.Resources>

更改前景色。

private void Button_Click(object sender, RoutedEventArgs e)
{
    if (Application.Current.Resources.Contains("txtColor"))
    {
         Application.Current.Resources["txtColor"] = new SolidColorBrush(Colors.Blue);
    }
}

答案 1 :(得分:1)

将所有Textbox的Foreground绑定到常用的Brush资源。定义Project常用的画笔资源,并在任何地方访问它。

在App.XML中声明画笔资源,以便您可以从项目的任何位置访问它。 [注意:您也可以定义资源字典并引用它]

<Application.Resources>
     <SolidColorBrush  Color="Red" x:Key="txtColor" />
</Application.Resources>

在所有文本框中将前景绑定到&#34; txtColor&#34;画笔资源。

<TextBox Foreground="{DynamicResource txtColor}" Text="TextBox" />

要更改所有文本框的前景颜色,请更改常用的资源颜色。下面我点击按钮更改了颜色。使用键访问资源并设置要设置的新画笔。

private void Button_Click(object sender, RoutedEventArgs e)
{
    if (Application.Current.Resources.Contains("txtColor"))
    {
         Application.Current.Resources["txtColor"] = new SolidColorBrush(Colors.Blue);
    }
}

答案 2 :(得分:0)

忽略我的代码并查看此答案

Find all controls in WPF Window by type

答案 3 :(得分:0)

所以......为了解决我的问题,当某些textBox被禁用时我无法改变textBoxes的前景颜色......我使用下面的代码...

<Application.Resources>
    <Style TargetType="TextBox">
        <Style.Triggers>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Foreground" Value="Orange"/>
            </Trigger>
            <Trigger Property="IsEnabled" Value="True">
                <Setter Property="Foreground" Value="Green"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</Application.Resources>

答案 4 :(得分:-1)

如何根据控制前景外观的标准文本框创建“usercontrol”。这样您就拥有了一个可重复使用的控件,您可以在任何您想要的地方使用它,并对其外观和行为进行“完全控制”。请查看this articlethis one,了解一些可能有助于您正确行事的示例;)