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 :).


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.


Ich habe die Verwendung von "App" .Current.FindResource () anstelle von "Application" gefunden.
Alansiqueira27

Ich bekomme FindResource nicht gefunden
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;


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.