0

我试图在运行时创建一个 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);

编辑:出于某种原因,我永远无法让标签工作,但是当我切换到文本框时,它工作正常。

谢谢你的回复。

4

2 回答 2

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

然而,从实验来看,如果你在设置 Style之后设置 OverridesDefaultStyle = true,它就可以正常工作。但是如果你在设置 Style之前设置了 OverridesDefaultStyle ,那就错了。(不,我不知道为什么会发生这种情况! grin)所以将 OverridesDefaultStyle 设置器移到 Style 设置器之后,或者(因为它不是您想要的效果所必需的),只需将其删除。

于 2009-04-25T04:07:08.353 回答
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()刷子自己冻结它。

于 2009-04-25T08:38:38.497 回答