2009-04-25 10 views
0

実行時にWPFコントロールを作成しようとしていますが、App.xmlリソースからのスタイルを無視する方法がわかりません。私はスタイルをnullに設定しようとしましたが、OverridesDefaultStyleはtrueですが運はありません。アプリの設定では、フォアグラウンドが白に設定されているため、明示的に設定することはできません。実行時に作成されたwpfコントロールのアプリケーションスタイルをオーバーライドする方法

 Label tb = new Label(); 
     tb.OverridesDefaultStyle = true; 
     tb.Style = null; 
     tb.Foreground = new SolidColorBrush(Colors.Black); 
     this.Children.Add(tb); 

編集:私はラベルが仕事を得ることができなかったんが、私はテキストボックスに切り替えたときに、それがうまく働いたいくつかの理由。

ありがとうございました。

答えて

1

Styleからnullに設定すると、継承を停止するだけで済みます。これはあなたのために働いていない場合、私は何か他のものが完全に起こっていることをお勧めしたい

var tb = new TextBlock() { Text = "Hello" }; 
tb.Style = null; 
tb.Foreground = Brushes.Blue; 
this.Children.Add(tb); 

:次に、あなたが好きなようにForegroundを設定することができます。

PS。独自のSolidColorBrushを作成するのではなく、Brushes.Blackを使用してください。それだけでなく、ブラシも凍結されます。あなたのコードは、効率の悪い凍結されていないブラシを作成します。ブラシのFreeze()を呼び出すことで、自分で凍結することもできます。

+0

ブラシの凍結についてはわかりませんでした。それはユーザー定義の色からでなければならないので、新しいSolidColorBrush(inputColor)とbrush.Freeze()は私が持っているものです。 –

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 =真を設定した場合、それは大丈夫に動作しているようですしかし、スタイルを設定する前にOverrideesDefaultStyle を設定すると、すべてが間違っています。 (いいえ、私はなぜこれが起こるのかわかりません!笑い)スタイル設定ツールの後にOverridesDefaultStyle設定ツールを移動するか(必要なエフェクトには必要ないので)、単に削除します。

関連する問題