Встановлення властивості Style мітки 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;

Знизу: не називайте Styleключове слово a, в Templateпідсумку ви переплутаєте a Styleта a Template, і не слід, оскільки це дві різні концепції.


Я знайшов, використовуючи "App" .Current.FindResource () замість "Application".
alansiqueira27,

Я отримую FindResource не знайдено
король Уельсу

Знайдено виправлення stackoverflow.com/questions/17704969/…
король Уельсу

Мені це дуже допомагає. Дякую ^^
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.