Festlegen der Style-Eigenschaft eines WPF-Labels im Code?

82

In App.xaml habe ich den folgenden Code:

<Application.Resources>
    <Style x:Key="LabelTemplate" TargetType="{x:Type Label}">
        <Setter Property="Height" Value="53" />
        <Setter Property="Width" Value="130" />
        <Setter Property="HorizontalAlignment" Value="Left" />
        <Setter Property="Margin" Value="99,71,0,0" />
        <Setter Property="VerticalAlignment" Value= "Top" />
        <Setter Property="Foreground" Value="#FFE75959" />
        <Setter Property="FontFamily" Value="Calibri" />
        <Setter Property="FontSize" Value="40" />
    </Style>
</Application.Resources>

Dies soll eine generische Vorlage für meine Etiketten bereitstellen.

Im Haupt-XAML-Code habe ich die folgende Codezeile:

<Label Content="Movies" Style="{StaticResource LabelTemplate}" Name="label1" />

Ich möchte jedoch die Style-Eigenschaft über Code initialisieren. Ich habe versucht:

label1.Style = new Style("{StaticResource LabelTemplate}");

und

label1.Style = "{StaticResource LabelTemplate}";

Keine der Lösungen war gültig.

Jede Hilfe wäre dankbar :).

Daniel
quelle
Gibt es einen Grund, dies aus dem Codebehind von UserControl heraus zu tun? Vielleicht gibt es elegantere Lösungen.
Steinstein Müller

Antworten:

183

Wo im Code versuchen Sie, den Stil zu bekommen? Code dahinter?

Sie sollten dies schreiben:

Wenn Sie im Code-Behind sind:

Style style = this.FindResource("LabelTemplate") as Style;
label1.Style = style;

Wenn du woanders bist

Style style = Application.Current.FindResource("LabelTemplate") as Style;
label1.Style = style;

Fazit: Benennen Sie a nicht Stylemit dem Schlüsselwort Template, Sie werden schließlich a Styleund a verwechseln Template, und Sie sollten es nicht tun , da dies zwei verschiedene Konzepte sind.

Damaskus
quelle
Ich habe die Verwendung von "App" .Current.FindResource () anstelle von "Application" gefunden.
Alansiqueira27
Ich bekomme FindResource nicht gefunden
Welsh King
Fand einen Fix stackoverflow.com/questions/17704969/…
Welsh King
Es hilft mir sehr. Vielen Dank ^^
Dôn Kayt
3

Bitte überprüfen Sie, ob das Ergebnis null ist, sonst werden Sie traurig ... ... if (style! = Null) this.Style = style;

Allen
quelle
10
Wenn es null ist, können Sie weinen oder das Problem beheben.
Allen
0

Möglicherweise eine alte Frage, aber wenn Sie versuchen, W10 UWP-App muss Ressourcen-Sammlung jedes Objekts oder Ressourcen-Sammlung des Anwendungsobjekts verwenden

KeyValuePair<object,object> styl = this.Resources
    .Where(x => x.Key.ToString() == "MyStyleTemplateName")
    .FirstOrDefault();
if (styl.Value != null)
    Style MyStyle = (Style)styl.Value;

Wobei MyStyleTemplateName als Ressource dafür definiert werden muss

Juan Pablo Gomez
quelle