Wpf 如何更改所有文本框';应用程序中的前景色
在我的应用程序(C#WPF)中,我在更多的网格中有大约30或40个文本框,我想在循环中更改它们的前景色。我使用下面的代码,它是有效的。但我想把它用于整个项目,而不仅仅是混凝土网格 xaml代码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
<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>