【发布时间】:2011-04-03 16:31:35
【问题描述】:
我目前正在处理的 wpf 项目有一个小问题。我是 WPF 的新手。在我的 app.xaml 中,我为我的应用程序使用 Microsoft Aero 主题。我的 app.xaml 中有类似的东西
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/PresentationFramework.Aero;V3.0.0.0;31bf3856ad364e35;component/themes/Aero.NormalColor.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
现在我想知道如何覆盖某些样式属性,例如对于按钮,我想覆盖字体样式,同时保留其余的航空样式。
如果我在窗口资源中为按钮定义样式,例如
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}" x:Key="RedTextBasedOnButton">
<Setter Property="Foreground" Value="Red" />
</Style>
并根据上述样式定义一个按钮
该按钮失去了所有的航空风格属性。我认为问题在于我为样式定义 BasedOn 属性的方式
BasedOn="{StaticResource {x:Type Button}}"
我认为资源不是静态的,因为它来自 dll,它可能应该是这样的。不过不确定。
BasedOn="{DynamicResource {x:Type Button}}"
但是上面会抛出异常,如果我的 app.xaml 中有多个资源字典怎么办?露娜和经典。我如何知道将哪个用作默认值,同时使用和覆盖另一个(例如 luna)专门用于我的 ui 中的某些控件?所以我的一些按钮将基于 luna 风格,而另一些则基于 aero 风格,并进行了一些进一步的修改?
有什么想法吗?
问候,
【问题讨论】:
-
Override Overriden WPF Theme 的可能重复项
-
是否有任何样式具有可以绑定的显式键?
-
1.动态链接 DLL 与动态链接资源无关 2. BasedOn 必须始终是静态资源