在我的应用程序(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循环。
答案 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)
忽略我的代码并查看此答案
答案 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 article或this one,了解一些可能有助于您正确行事的示例;)