2

就我而言,根据配置设置,网格线应该以不同的颜色出现。

我已经用 TargetType of 定义了一个简单的样式,CellValuePresenter我注意到该样式适用于所有列,除了那些也具有目标类型的样式CellValuePresenter并拥有自己的ControlTemplate. 而且我在整个解决方案中有很多带有ControlTemplates的样式CellValuePresenter,并且不可能将它们全部更改为BasedOn我创建的这种新样式。

我有什么选择,这样带有ControlTemplates 的样式可以在不修改每个样式的情况下获取我的更改。

4

2 回答 2

2

您可以将样式BasedOn设置为该元素的默认样式,以便它也包含来自隐式样式的所有设置器。

例如,

<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>
于 2013-04-26T19:31:17.660 回答
2

(不)幸运的是,样式并不像它们在 CSS 中那样应用,所以你最终会得到什么是没有歧义的,样式是相互建立的。

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

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

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

于 2013-04-26T19:34:26.840 回答