WPF - 全局样式?

29

有没有一种方法可以为我的WPF应用程序设置全局样式?

我希望能够将样式应用于所有具有图像子元素的按钮。

3个回答

34

嗯,有点像——这是一种你可以采用的全局方法——将以下元素放在App.xaml中,所有按钮都会更改(除非你手动应用样式到某些按钮)。

<Style TargetType="{x:Type Button}">
    <Setter Property="Background" Value="LightPink"/> <!-- You should notice that one... -->
</Style>

然而,如果你只想单击带有图像的按钮 - 每次都必须从 Button 继承,然后应用以下样式:

public class CustomImageButton:Button{}
<Style TargetType="{x:Type local:CustomImageButton}">
    <Setter Property="Background" Value="LimeGreen"/>
</Style>
<local:CustomImageButton Content="ClickMe"/>

这是一种非常粗略的全局样式 - 您需要遵循惯例才能使其正常工作。

另一种选择是使用主题 - 在这里了解更多信息。


2
很遗憾,主题链接已失效。这里是一篇来自MSDN的文章链接,介绍如何使用类似的主题。 - Jon Peterson

5
您可以在WPF中使用隐式样式,通过类型来应用它们。
例如:
<Style TargetType="Button">

这个样式将应用于该范围内的所有按钮(如果样式在App.XAML中,则将应用于所有按钮;如果它在链中较低,则将应用于其下方的所有按钮)。

如果您只想将其应用于特定类型的按钮(例如imagebuttons),请创建一个从button派生的类型(称之为ImageButton),然后创建针对该类型的样式。


好的...这似乎有点起作用了。我的其中一个按钮似乎遵守了这个改变,但其他的没有。如果我给样式添加一个x:Key,然后通过使用 Style = "{StaticResource DisabledButton}" 从每个按钮显式调用它,它们都可以工作。有没有什么方法可以避免必须为每个按钮添加显式引用? - Sonny Boy
确保定义此样式的资源字典在需要应用该样式的所有按钮的范围内。将此样式放置在App.xaml中将对应用程序中的所有按钮可见。向下移动将限制其可见性。 - Brad Cunningham

4
将样式放入App.xaml文件中的ResourceDictionary标签中,它将应用于整个应用程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接