标记前台资源

时间:2012-08-17 15:05:24

标签: wpf binding resources label foreground

我在这里遇到一个小问题,我无法弄明白。

我正在尝试设置包含多种颜色,画笔和ResourceDictionary条目的ControlTemplate

我的问题是我正在尝试将Label的前景刷设置为同一文件中的资源,并且该位不起作用且没有跟踪消息。

<Color x:Shared="false" x:Key="DefaultForegroundColor" A="255" R="0" G="0" B="0" />
<!--<Color x:Shared="false" x:Key="DefaultForegroundColor" A="255" R="255" G="0" B="0" />-->
<SolidColorBrush x:Shared="false" x:Key="DefaultForegroundBrush" Color="{DynamicResource DefaultForegroundColor}"/>

<Color x:Shared="false" x:Key="HeadingColor" A="255" R="17" G="158" B="218" />
<SolidColorBrush x:Shared="false" x:Key="HeadingBrush" Color="{DynamicResource HeadingColor}"/>


<Style TargetType="{x:Type Label}" x:Key="SectionHeadingStyle">
   <Setter Property="FontSize" Value="18"/>
   <Setter Property="Foreground" Value="{DynamicResource HeadingBrush}"/>
   <Setter Property="Template">
      <Setter.Value>
         <ControlTemplate TargetType="Label">
            <Border BorderThickness="0,0,0,2" BorderBrush="{DynamicResource DefaultForegroundBrush}" HorizontalAlignment="Left">
               <ContentPresenter Margin="5"/>
            </Border>
         </ControlTemplate>
      </Setter.Value>
   </Setter>
</Style>

边框颜色工作正常(即使它不是黑色)但标签的前景仍然是黑色而不是浅蓝色。我有什么想法吗?

感谢。

更新 忘记提及它在设计师中看起来也不错。

更新2 在窥探可视树时,似乎Foreground颜色使模板完全通过模板,直到ContentPresenter使用TextBlock显示标题文本。 TextBlock保持黑色,而上面的ContentPresenter的蓝色阴影设置为TextElement.Foreground。我可以在模板中做些其他事情来为创建的TextBlock提供前景色吗?

2 个答案:

答案 0 :(得分:2)

我看到两种可能的解决方案

您需要将资源设为StaticResource。例如,如果您将画笔更改为此,则可以使用:

<SolidColorBrush x:Shared="false" x:Key="HeadingBrush" Color="{StaticResource HeadingColor}"/>

或者,如果您将样式中的前景更改为StaticResource,它将起作用。

另一个选项是从画笔和颜色中删除x:Shared="false"。这也解决了这个问题。

<Color x:Key="HeadingColor" A="255" R="17" G="158" B="218" />
<SolidColorBrush x:Key="HeadingBrush" Color="{DynamicResource HeadingColor}"/>

DynamicResource的多个图层加上非共享资源的组合似乎是一个问题。

答案 1 :(得分:1)

刚才意识到我从未关闭过这个问题:

最后,有一个库在应用程序级别导入资源。由于某种原因,这些与我的资源发生冲突,但都没有应用。将库的资源移动到Window或UserControl级别可以解决问题。