应用程序级样式是否可以引用UserControl资源?

时间:2015-02-26 07:06:07

标签: wpf

在我的WPF应用程序中,我创建了一个SolidColorBrush类型的资源和一个使用此资源作为背景的按钮样式。 在我的UserControl中,我覆盖了具有相同名称但颜色不同的颜色资源。 我是否可以按照UserControl中的按钮使用应用程序样式但使用UserControl中定义的颜色的方式创建它?

1 个答案:

答案 0 :(得分:0)

当你试图混淆资源定义的自上而下的性质时,你在这里尝试做的是与WPF中的资源概念有点相反。因此,即使你让它工作,它也会导致非典型的行为,使得下一个处理代码的人(或未来的你)很难理解正在发生的事情。

我建议您执行以下操作以获得您想要的行为,仍然保持秩序:

假设您的应用级资源如下:

<SolidColorBrush x:Key="MyColor" Color="Blue" />

<Style x:Key="TextBlockStyle" TargetType="TextBlock">
    <Setter Property="Foreground" Value="{StaticResource MyColor}" />
    ... (other setters)
</Style>

如果要使用本地笔刷覆盖Foreground,请在使用TextBlock时显式执行此操作(也可能是您的UserControl)并使用BasedOn从应用程序级别样式继承其他所有内容:

<SolidColorBrush x:Key="MyOverridingColor" Color="Red" />

<Style x:Key="OverridingTextBlockStyle" TargetType="TextBlock" BasedOn="{StaticResource TextBlockStyle}">
    <Setter Property="Foreground" Value="{StaticResource MyOverridingColor}" />
</Style>

我建议为第二种颜色使用不同的名称(上例中的MyOverridingColor),以明确它是不同的颜色。