3

ResourceDictionaryにマージされた の一部であるブラシがありApplication.Resourcesます。

しかし、何らかの理由で、スタイルがコントロールの 1 つに適用されているときに実行時に解決されません。ただし、例外がスローされた時点でイミディエイト ウィンドウから Application.Current.FindResource("BrushName") を呼び出すと、リソースが見つかります。

何か不足していますか?WPF は、アプリのリソースでリソースを検索しようとするはずではありませんか?

更新 アプリケーションは非常に大きいため、実際のコードをすべて投稿することはできませんが、リソースがマージされて使用される方法は次のとおりです。

Brushes.xaml

<ResourceDictionary ...>
  <SolidColorBrush x:Key="BrushName" Color="#12345678" />
</ResourceDictionary>

SomeStyles.xaml

<ResourceDictionary ...>
  <Style x:Key="SomeStyle">
    <Setter Property="SomeProperty" Value="{StaticResource BrushName}" />
  </Style>
</ResourceDictionary>

App.xaml

<Application ...>
  <Application.Resources>

    <ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="Brushes.xaml" />
        <ResourceDictionary Source="SomeStyles.xaml" />
      </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>


  </Application.Resources>
</Application ...>

そして、一部のコントロールは、次のようにリソースを使用してスタイルを使用する場合があります。

...
Style={StaticResource SomeStyle}
...

アップデート

コードで作成されたメニューとコントロールで発生するようです。どのウィンドウのビジュアル ツリーにも含まれていないコントロールやメニューに関連している可能性はありますか?

4

2 に答える 2

2

SomeStyle.xaml ディクショナリは、次のように Brushes.xaml ディクショナリを直接参照する必要があります。

<ResourceDictionary ...>
  <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="Brushes.xaml" />
  </ResourceDictionary.MergedDictionaries>
  <Style x:Key="SomeStyle">
    <Setter Property="SomeProperty" Value="{StaticResource BrushName}" />
  </Style>
</ResourceDictionary>

StaticResources は現在の辞書のツリーを検索するだけなので、参照する必要があるリソースを渡す必要があります。

于 2011-08-30T11:22:52.857 に答える
0

XAML マークアップ拡張機能で DynamicResource を使用していますか?

xaml は {StaticResource brushName} ではなく {DynamicResource brushName} である必要があります

于 2010-03-30T08:28:11.520 に答える