[英]Can an application level style reference a UserControl resource?
在我的WPF应用程序中,我创建了一个SolidColorBrush类型的资源和一个使用该资源作为背景的按钮样式。 在我的UserControl中,我使用相同的名称但使用不同的颜色来覆盖颜色资源。 我可以通过某种方式创建它,即该UserControl中的按钮将使用应用程序样式,但具有UserControl中定义的颜色吗?
当您尝试混淆资源定义的自上而下特性时,您在此处尝试做的工作与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
),以明确它是另一种颜色。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.