Задать свойство Style метки WPF в коде?

В 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}";

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

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

 csteinmueller21 мая 2012 г., 16:17
Есть ли какая-либо причина для этого из кода пользователя UserControl? Может быть, есть более элегантные решения.

Ответы на вопрос(3)

Please check for null style result or you will be sad... ... if (style != null) this.Style = style;

 09 мая 2014 г., 12:23
Когда он нулевой, вы можете плакать или поднимать трубку и исправлять проблему.

Возможно старый вопрос, но если вы пытаетесь 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 должен быть определен как ресурсthis

Решение Вопроса

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

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

If you're in code-behind:

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

If you're somewhere else

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

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

 06 июл. 2016 г., 16:46
Я получаю FindResource не найден
 15 дек. 2013 г., 19:34
Хороший Продолжай публиковать хорошие предложения ....
 29 июн. 2014 г., 15:31
Я обнаружил, что использовал «App» .Current.FindResource () вместо «Application».
 06 июл. 2016 г., 16:48
Нашли исправлениеstackoverflow.com/questions/17704969/…

Ваш ответ на вопрос