Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何更改所有文本框';应用程序中的前景色_Wpf - Fatal编程技术网

Wpf 如何更改所有文本框';应用程序中的前景色

Wpf 如何更改所有文本框';应用程序中的前景色,wpf,Wpf,在我的应用程序(C#WPF)中,我在更多的网格中有大约30或40个文本框,我想在循环中更改它们的前景色。我使用下面的代码,它是有效的。但我想把它用于整个项目,而不仅仅是混凝土网格 xaml代码 <grid x:Name"stk"> .... some textBoxes ... </grid> .... 一些文本框。。。 *.cs代码 foreach (TextBox item in this.stk.Children.OfType<TextBox&g

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

xaml代码

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

.... 一些文本框。。。
*.cs代码

foreach (TextBox item in this.stk.Children.OfType<TextBox>())
{
    if (item.Name.StartsWith("txt"))
    item.Foreground = Brushes.Orange;
}
foreach(this.stk.Children.OfType()中的文本框项)
{
if(item.Name.StartsWith(“txt”))
项目.前景=画笔.橙色;
}

因此,当我有更多的网格时,我必须将
x:Name=“…”
放入每个网格中,这意味着有更多的foreach循环

将文本框的所有前景绑定到公共笔刷资源。定义项目通用的笔刷资源,并在任何地方访问它

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

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

忽略我的代码,看看这个答案

基于控制前景外观的标准文本框创建“用户控件”怎么样。这样,您就拥有了一个可重用的控件,您可以在任何地方使用它,并且可以“完全控制”它的外观和行为。看一看,或者找一些可能有助于您走正确道路的示例;)

更简单的方法

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

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

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

所以。。。为了解决当某些文本框被禁用时无法更改文本框前景色的问题。。。我使用下面的代码

<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>


xaml
中使用
触发器
foreach(这个.Children.OfType()中的网格)
顺便问一下,为什么不使用绑定呢?我是个初学者,所以我不知道你的循环与OP的有什么不同
controlGrid
是一些控件的集合?对不起,我忘了做声明,你能告诉我怎么做吗。。。或者给我举个例子?谢谢:),你在开玩笑。下面是我的另一个解决方案,我希望对您来说会简单得多。您不需要为30或40个文本框绑定颜色。但是。。。这项工作几乎完美,但只有在启用文本框的情况下。。如果他们被禁用,它就不起作用了。。。为什么?正常情况下,我可以设置前景色。。。但不是这样。。。我不明白这对我有用。复制粘贴处于禁用状态时未应用前景的文本框XAML。另外,请确保您没有从codebehindin手动分配前景色textBox只是设置了textBox。Text=???在文本框中输入一些文本。如果前景仍然未更改,则创建一个简单示例,其中只有两个文本框,启用状态为false,并在按钮中单击使用上述方法更改前景。如果问题未在示例级别中再现,则您可以确保在应用程序中更改前景。这是我的代码:我使用上面的代码。。我想给你们发张照片,但我只有8个代表。第一个有效,第二个无效。。。我的应用程序中没有其他内容
<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);
    }
}
<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>