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