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 に答える