在代码中设置WPF标签的Style属性?


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

Answers:


183

您想在代码中的哪里获取样式?代码后面?

您应该这样写:

如果您位于代码背后:

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

如果你在别的地方

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

底部注释:不要Style使用关键字命名a ,Template最终将aStyle和a混淆Template,并且不应该将它们混淆,因为这是两个不同的概念。


我发现使用“ App” .Current.FindResource()而不是“ Application”。
alansiqueira27 2014年

我得到FindResource没有找到
威尔士国王


它对我有很大帮助。谢谢^^
唐Kayt

3

请检查空样式的结果,否则您会感到沮丧... ...如果(style!= null)this.Style = style;


10
当它为null时,您可以哭泣或手动操作并解决问题。
艾伦

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必须定义为此资源

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.