【问题标题】:How to use StyleSelector without losing the global style set?如何在不丢失全局样式集的情况下使用 StyleSelector?
【发布时间】:2012-05-17 16:47:47
【问题描述】:

假设我为 ItemsContainer 控件设置了一个全局样式,并且该样式在运行时应用得很好。现在我需要根据某些条件为每一行绘制 Row 背景。为此,我决定使用 RowStyleSelector。

<RadTreeListView RowStyleSelector="{StaticResource ActivityRowStyleSelector}" />

<Style x:Key="xxxTreeListViewStyle" TargetType="telerik:TreeListViewRow">
    <Setter Property="Background" Value="#FFFFE1C4" />
</Style>

<local:xxxRowStyleSelector x:Key="xxxRowStyleSelector"
                           FailureStyle="{StaticResource xxxTreeListViewStyle}"
                           .../>

但这会覆盖我为行设置的全局样式,我只想将背景属性更改为现有样式。

另一个问题是:如何将此更改应用于特定单元格,而不是行?

【问题讨论】:

    标签: wpf xaml wpf-controls telerik


    【解决方案1】:

    您可以使用Style.BasedOn 属性从另一种样式“继承”一种样式。像这样使用它(其中RowGlobalStyle 是您之前创建的全局样式的名称):

    <Style x:Key="xxxTreeListViewStyle" TargetType="telerik:TreeListViewRow"
        BasedOn="{StaticResource RowGlobalStyle}">
        <Setter Property="Background" Value="#FFFFE1C4" />
    </Style>
    

    【讨论】:

    • 此样式在另一个 xaml 文件中,我将其合并到应用程序资源中。如何将 BasedOn 与另一个 xaml 文件中的样式一起使用?
    • @Goran 我不确定,我没有在一个程序中处理多个 XAML 文件。如果您尝试将 BasedOn 与另一个文件中的样式一起使用,是否会出现编译器错误?
    • 是的,我找不到资源异常。我能够解决那个问题,似乎合并时 xaml 文件的顺序很重要。无论如何,它仍然不起作用。现在我得到了完全相反的结果:现在我的自定义样式被应用了,但是 setter Property="Background" 没有做任何事情......以前是背景改变了,但是样式丢失了。
    猜你喜欢
    • 1970-01-01
    • 2022-01-26
    • 2018-11-08
    • 2021-08-15
    • 2019-08-05
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    相关资源
    最近更新 更多