Установка свойства стиля метки WPF в коде?


82

В App.xaml у меня есть следующий код:

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

Это предназначено для предоставления общего шаблона для моих этикеток.

В основном коде XAML у меня есть следующая строка кода:

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

Однако я бы хотел инициализировать свойство Style с помощью кода. Я пытался:

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

и

label1.Style = "{StaticResource LabelTemplate}";

Ни одно из решений не было действительным.

Любая помощь будет оценена :).


Есть ли причина делать это из кода UserControl? Может есть более изящные решения.
csteinmueller

Ответы:


184

Где в коде вы пытаетесь получить стиль? Код позади?

Вы должны написать это:

Если вы используете код программной части:

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

Если ты где-то еще

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

Нижнее примечание: не называйте a Styleключевым словом Template, в конечном итоге вы запутаете a Styleи a Template, и вам не следует этого делать, поскольку это две разные концепции.


Я нашел использование «App» .Current.FindResource () вместо «Application».
alansiqueira27

Я получаю FindResource not found
Welsh King


Это мне очень помогает. Спасибо ^^
Dôn Kayt

3

Пожалуйста, проверьте результат нулевого стиля или вам будет грустно ... ... if (style! = Null) this.Style = style;


10
Когда он равен нулю, вы можете плакать или взбеситься и исправить проблему.
Аллен

0

Возможно, старый вопрос, но если вы пытаетесь использовать приложение W10 UWP, оно должно использовать коллекцию ресурсов каждого объекта или коллекцию ресурсов объекта Application

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

Где MyStyleTemplateName должен быть определен как ресурс этого

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.