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.