如何在WPF中使用控制模板对样式强加默认样式

时间:2013-04-26 17:48:18

标签: wpf styles controltemplate

在我的情况下,根据配置设置,网格线应以不同的颜色显示。

我已经定义了一个TargetType为CellValuePresenter的简单样式,我注意到该样式应用于除了目标类型为CellValuePresenter的样式且具有自己的{{ {1}}。我在解决方案中为ControlTemplate提供了许多样式ControlTemplate,并且无法将所有这些样式更改为CellValuePresenter我创建的这种新样式。

我有哪些选择,以便BasedOn的样式可以在不修改每个样式的情况下进行更改。

2 个答案:

答案 0 :(得分:2)

您可以将样式BasedOn设为该元素的默认样式,以便它包含隐式样式中的所有setter。

例如,

<Style TargetType="{x:Type CellValuePresenter}">
    <!-- Generic Style Setters -->
</Style>

<!-- This Style will include the setters from the implicit style above -->
<Style x:Key="CustomCellStyle"
       TargetType="{x:Type CellValuePresenter}"
       BasedOn="{StaticResource {x:Type CellValuePresenter}}">

    <Setter Property="ControlTemplate" ... />

</Style>

答案 1 :(得分:2)

(联合国)幸运的是,样式并不像在CSS中那样适用,所以最终你最终会得到什么样的模式,其中样式在彼此之间建立起来。

如果为类型创建样式,则它将应用于样式范围内的所有类型。这意味着如果您将其包含在app.xaml的顶部,则一切都会受到影响,但如果仅将其包含在用户控件或window.xaml中,则仅适用于此。

如果创建样式并将其应用于特定控件,则本地样式集将覆盖基于全局类型的样式。除非您使用的是BasedOn,否则您明确表示不能这样做。

不幸的是,我认为你将被迫重构你如何处理你的风格以获得你想要实现的外观,并且BasedOn将是你要走的路。