Ustawianie właściwości Style etykiety WPF w kodzie?

82

W App.xaml mam następujący kod:

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

Ma to na celu zapewnienie ogólnego szablonu dla moich etykiet.

W głównym kodzie XAML mam następujący wiersz kodu:

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

Chciałbym jednak zainicjować właściwość Style za pomocą kodu. Próbowałem:

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

i

label1.Style = "{StaticResource LabelTemplate}";

Żadne z rozwiązań nie było ważne.

Każda pomoc będzie mile widziana :).

Daniel
źródło
Czy jest jakiś powód, aby to zrobić z za kodem UserControl? Może są bardziej eleganckie rozwiązania.
csteinmueller

Odpowiedzi:

183

Gdzie w kodzie próbujesz uzyskać styl? Kod za?

Powinieneś to napisać:

Jeśli korzystasz z kodu:

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

Jeśli jesteś gdzie indziej

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

Dolna uwaga: nie nazywaj a Stylesłowem kluczowym Template, w końcu pomylisz a Stylei a Template, a nie powinieneś, ponieważ są to dwie różne koncepcje.

Damaszek
źródło
Znalazłem użycie „App” .Current.FindResource () zamiast „Application”.
alansiqueira27
Dostaję FindResource nie znaleziono
Welsh King
Znaleziono poprawkę stackoverflow.com/questions/17704969/ ...
Welsh King
To bardzo mi pomaga. Dziękuję ^^
Dôn Kayt
3

Sprawdź, czy nie ma wyniku w stylu null lub będziesz smutny ... ... if (style! = Null) this.Style = style;

Allen
źródło
10
Kiedy jest zerowy, możesz płakać lub wymyślać ludzi i rozwiązać problem.
Allen,
0

Może stare pytanie, ale jeśli próbujesz aplikacja UWP W10, musi używać kolekcji zasobów każdego obiektu lub kolekcji zasobów obiektu aplikacji

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

Gdzie MyStyleTemplateName musi być zdefiniowany jako zasób this

Juan Pablo Gomez
źródło