2009-04-25 3 views
0

Ich versuche, ein WPF-Steuerelement zur Laufzeit zu erstellen, aber ich kann nicht herausfinden, wie es die Stile aus den App.xml-Ressourcen zu ignorieren. Ich habe versucht, den Stil auf null und den OverridesDefaultStyle auf True, aber kein Glück zu setzen. Die App-Einstellungen setzen den Vordergrund auf weiß, und ich kann nicht scheinen, es auf etwas anderes zu setzen.Wie Überschreiben von Anwendungsstilen in einem Wpf-Steuerelement, das zur Laufzeit erstellt wird

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

Edit: Aus irgendeinem Grund habe ich nie das Etikett bekommen könnte zu arbeiten, aber wenn ich in die Textbox eingeschaltet, es funktionierte gut.

Vielen Dank für Ihre Antworten.

Antwort

1

Alles was Sie tun müssen, ist Style auf null zu setzen, damit es nicht erbt. Dann können Sie die Foreground setzen, was auch immer Sie mögen:

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

Wenn dies nicht für Sie arbeiten, würde ich etwas ganz anderes vor sich geht vorschlagen.

PS. Verwenden Sie Brushes.Black anstatt Ihre eigene SolidColorBrush zu erstellen. Es ist nicht nur sauberer, die Bürste wird auch gefroren. Ihr Code erstellt einen ungefrorenen Pinsel, der weniger effizient ist. Sie können es auch selbst einfrieren, indem Sie Freeze() auf dem Pinsel aufrufen.

+0

Ich wusste nichts über das Einfrieren von Pinseln, danke dafür. Es muss von einer benutzerdefinierten Farbe sein, also neue SolidColorBrush (inputColor) und dann pinsel.Freeze() ist was ich habe. –

1

Die folgende nahezu identische Code funktioniert für mich:

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

Von experimentieren, es scheint jedoch, dass, wenn Sie Overridesdefault = true nach Einstellung Stil gesetzt, es in Ordnung, funktioniert. Aber wenn Sie OverridesDefaultStyle vor Einstellung Style setzen, geht alles schief. (Nein, ich weiß nicht, warum das passiert! grinsen) So verschieben Sie den OverridesDefaultStyle-Setter nach dem Style-Setter, oder (da es für den gewünschten Effekt nicht erforderlich ist), entfernen Sie es einfach.

Verwandte Themen