如何创建未自动应用的样式?

时间:2016-07-12 13:32:06

标签: c# wpf xaml resourcedictionary wpf-style

In this answer如果你省略了x:Name属性,那么(正确吗?似乎......)声称这个样式会自动应用到各处。

  

如果未在每个样式上指定标识符,则该样式将应用于与您指定的TargetType匹配的所有控件。如果您希望按钮看起来不同,您可以执行与上面相同的操作,但也包括该样式的标识符,将由每个不同的按钮使用:[...]

但是,当我添加x:Name标识符时,应该自动应用,还是应该?

因为当我尝试这个时:

<Style TargetType="{x:Type TextBlock}" x:Name="RunningTextStyle">
    <Setter Property="FontSize" Value="15" />
</Style>
我的ResourceDictionary中的

以这种方式链接到我的app.xaml

<Application.Resources>
    <ResourceDictionary Source="ApplicationStyles.xaml" />
</Application.Resources>

它仍会自动应用于所有TextBlock

如何创建必须与其标识符一起使用的样式才能显示?

我在VS2015中使用Resharper,当我尝试以这种方式手动将样式添加到x:Key时,TextBlock名称甚至都没有显示:Style="{StaticResource ...}"定义为可能性(我曾经用过这种方式,但确实如此。它可以工作,但通常是由R#或VS广告来使用)。

有趣的是,我只有几个小时才开始相反,我的Button样式没有自动应用。

2 个答案:

答案 0 :(得分:3)

为Style添加x:Key="MyArbitraryStyleKey"属性。它位于ResourceDictionary,&#34;名称&#34; (比喻,可以这么说)字典中的一个东西叫做一个密钥,当你以这种方式看待它时,它确实有意义。功能上,在XAML中,x:Namex:Key调用不同的代码以不同的方式执行不同的操作,即使语义差异最初感觉有点模糊。

<Style TargetType="{x:Type TextBlock}" x:Key="RunningTextStyle">
    <Setter Property="FontSize" Value="15" />
</Style>

...

<TextBlock 
    Style="{StaticResource RunningTextStyle}" 
    Text="I tried Resharper once. Sent them back their demo, tied to a brick."
    />

如果Resharper不喜欢它,请向他们发送错误报告(嘿,原来Resharper很喜欢它 - 我收回了我所说的一切!)

答案 1 :(得分:3)

只需使用x:Key="RunningTextStyle"

x:Name="RunningTextStyle"内容即可