【问题标题】:What do I use for `BasedOn` when creating a custom style for a DataGridColumnHeader in WPF?在 WPF 中为 DataGridColumnHeader 创建自定义样式时,我应该为“BasedOn”使用什么?
【发布时间】:2009-10-02 01:51:16
【问题描述】:

我应该为这种风格的BasedOn 写什么?

<Style
    x:Key="DataGrid_ColumnHeaderStyle"
    TargetType="wt:DataGridColumnHeader"
    BasedOn="??????????"> <!-- I want this to be a reference to the default style -->
    <Setter
        Property="BorderBrush"
        Value="{StaticResource Media_RaisedBorderBrush}" />
    <Setter
        Property="Background"
        Value="{StaticResource Media_RaisedBackgroundBrush}" />
    <Setter
        Property="Foreground"
        Value="{StaticResource Media_RaisedForegroundBrush}" />
</Style>

我不想覆盖整个默认样式,我只想使用 setter 更改少数属性。

编辑:

我知道如何使用BasedOn,但我只是不知道我要建立自己的风格的风格的名称或在哪里找到它。默认/内置样式的名称是什么?

编辑 2:

好吧,我想这毕竟不是我需要的。我是否包含BasedOn="{StaticResource {x:Type wt:DataGridColumnHeader}}" 似乎没有任何区别。问题是仅设置BorderBrushBackgroundForeground 会导致排序箭头消失。我不明白为什么会这样,因为排序箭头是在ControlTemplate 中定义的,我没有编辑/覆盖ControlTemplate。我的排序箭头在哪里? (我肯定启用了排序,单击列标题确实会导致数据排序......它只是不显示箭头。)

【问题讨论】:

    标签: wpf xaml wpftoolkit styles


    【解决方案1】:

    BasedOn="{StaticResource {x:Type TextBox}}"> 它将继承默认样式(这是用于 TextBox 但它适用于每个控件)。

    【讨论】:

    • 谢谢...很好,但它不能解决我的问题。我将编辑我的帖子进行解释。
    【解决方案2】:

    按照我的理解,您不需要将 BasedOn 指定为默认样式。也许如果您设置 OverridesDefaultStyle 您将不得不这样做。我相信默认样式仍然适用,只有您在样式设置器中指定的属性会改变。

    就查找有关默认样式/模板的更多信息而言,一种方法是在 Blend 中打开您的项目,然后右键单击要查看其默认模板的元素并选择“编辑模板”。 ..”,然后选择编辑副本。

    【讨论】:

    • @Jacob,谢谢。我原以为这就是它的工作原理,但是当我尝试使用该样式 (ColumnHeaderStyle="{StaticResource DataGrid_ColumnHeaderStyle}") 时,排序箭头停止出现在我的 DataGrid 上。我使用 Blend 提取了默认样式,箭头路径是ControlTemplate 的一部分,但我没有覆盖它——我只设置了BorderBrushBackgroundForeground。所以,我不清楚什么被覆盖,什么没有被覆盖。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 2023-03-30
    • 2019-06-30
    • 1970-01-01
    相关资源
    最近更新 更多