我正在尝试在运行时创建一个WPF控件,但我无法弄清楚如何使它忽略来自App.xml资源的样式。我已经尝试将样式设置为null并将OverridesDefaultStyle设置为true但没有运气。应用程序设置将前景设置为白色,我似乎无法明确地将其设置为其他任何内容。
Label tb = new Label();
tb.OverridesDefaultStyle = true;
tb.Style = null;
tb.Foreground = new SolidColorBrush(Colors.Black);
this.Children.Add(tb);
编辑:出于某种原因,我从来没有让Label工作,但是当我切换到文本框时,它工作正常。
感谢您的回复。
答案 0 :(得分:1)
以下几乎相同的代码对我有用:
Label l = new Label();
l.Content = "Fie!!!";
l.Style = null;
l.OverridesDefaultStyle = true; // not required, see below
l.Foreground = new SolidColorBrush(Colors.Blue);
((Grid)Content).Children.Add(l);
然而,从实验开始,如果在设置样式后设置OverridesDefaultStyle = true ,它似乎没问题。但是如果在设置Style之前设置OverridesDefaultStyle ,那一切都会出错。 (不,我不知道为什么会发生这种情况! grin )所以将OverridesDefaultStyle设置器移到Style setter之后,或者(因为它不是你想要的效果所必需的),只需删除它。 / p>
答案 1 :(得分:1)
您只需将Style
设置为null
即可停止继承。然后,您可以将Foreground
设置为您喜欢的任何内容:
var tb = new TextBlock() { Text = "Hello" };
tb.Style = null;
tb.Foreground = Brushes.Blue;
this.Children.Add(tb);
如果这不适合你,我会建议其他事情继续发生。
PS。使用Brushes.Black
而不是创建自己的SolidColorBrush
。它不仅更干净,而且刷子也会被冷冻。您的代码会创建一个未冻结的画笔,效率较低。您也可以通过在画笔上调用Freeze()
来自行冻结。