0

ここに、理解できない小さなWPFの問題があります。

ResourceDictionaryいくつかの色、ブラシ、ControlTemplateエントリを含むように設定しようとしています。

私の問題はLabel、同じファイル内のリソースにaの前景ブラシを設定しようとしていて、そのビットが機能せず、それに関するトレースメッセージがないことです。

<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>

境界線の色は(黒でなくても)正常に機能しますが、ラベルの前景は水色ではなく黒のままです。私が間違っていることについて何か考えはありますか?

ありがとう。

UPDATE デザイナーにも似合うと言うのを忘れました。

UPDATE 2 ビジュアルツリーをスヌーピングすると、がヘッダーテキストを表示するまでForeground、色がテンプレートをほとんど通過するように見えます。上記のContentPresenterがに設定された青の素敵な色合いを持っている間、残りは黒のままです。作成した前景色を与えるためにテンプレートで他にできることはありますか?ContentPresenterTextBlockTextBlockTextElement.ForegroundTextBlock

4

2 に答える 2

2

私は2つの可能な解決策を見ます

リソースをにする必要がありますStaticResource。たとえば、ブラシをこれに変更すると、次のように機能します。

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

または、スタイルの前景をに変更すると、StaticResource機能します。

もう1つのオプションはx:Shared="false"、ブラシと色の両方からを削除することです。これで問題も解決します。

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

DynamicResourceの複数のレイヤーと非共有リソースの組み合わせに問題があるようです。

于 2012-08-17T15:17:35.553 に答える
1

私はこの質問を決して閉じなかったことに気づきました:

結局、アプリケーションレベルでリソースをインポートするライブラリがありました。何らかの理由で、これらは私のリソースとの競合を引き起こし、どちらも適用されませんでした。ライブラリのリソースをWindowまたはUserControlレベルに移動すると、問題が修正されました。

于 2012-10-02T14:39:35.740 に答える