0

アプリケーション テーマ用に、別のクラス ライブラリ MyApp.Themes.dll を作成しました。このライブラリのルート フォルダーには、Standard.xaml があります。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary 
      Source="pack://application:,,,/MyApp.Themes;component/Standard/Accordion.xaml"/>
  </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

Standard フォルダーには、Accordion.xaml があります。

<ResourceDictionary xmlns:layoutPrimitivesToolkit="..."
                    xmlns:layoutToolkit="..."
                    ...>
  <!--  layoutPrimitivesToolkit:AccordionButton  -->
  <Style TargetType="layoutPrimitivesToolkit:AccordionButton">
    ...
  </Style>

  ...
</ResourceDictionary>

これは、WPF Toolkit アコーディオン コントロールの既定のスタイルですが、AccordionItem のスタイルは、背景を透明に設定するように変更されています (既知のバグである青ではなく)。

両方の xaml ファイルで、ビルド アクションは "Resource" に設定されています。さて、MyApp WPF プロジェクトで MyApp.Themes ライブラリを参照した後、App.xaml に次のように記述しました。

<Application.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary             
        Source="pack://application:,,,/MyApp.Themes;component/Standard.xaml" />
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Application.Resources>

動作しません (エラーはありません。スタイルが適用されていないだけです)。Accordion.xaml スタイルを App.xaml に直接コピーして貼り付けると、機能します。一部の人々は、ダミーのリソース ディクショナリを追加することを提案したので、MergedDictionaries 終了タグの後に App.xaml に次を追加しました。

<Style TargetType="{x:Type layoutToolkit:AccordionItem}" /> 

繰り返しますが、うまくいきません。誰かがこれを解決するのを手伝ってくれますか? ちなみに、私は他の人が提案したアプローチを試しませんでした - basedOn を使用します。これを行う必要がある場合は、MyApp.Themes で行いたいと思います。これにより、App.xaml でテーマをより適切に使用できるようになります。前もって感謝します。

UPDATE1: Accordion.xaml コンテンツを Standard.xaml に直接コピーして貼り付けると機能します

UPDATE2: Standard.xaml でローカル アセンブリ リソース ファイル URI (http://msdn.microsoft.com/en-us/library/aa970069.aspx) を試しました:

<ResourceDictionary Source="pack://application:,,,/Standard/Accordion.xaml"/>

standard/accordion.xaml が見つからないというエラーがスローされます。

4

1 に答える 1

1

.NET にバグがあるようです。以下のスレッドを参照してください。

マージされたディクショナリを含むリソース ディクショナリを参照する際の問題

また、Microsoft サイトには接続ページがあります。

https://connect.microsoft.com/VisualStudio/feedback/details/609601/merge-dictionaries-does-not-work-when-we-merge-merged-dictionaries#tabs

于 2012-10-01T11:04:30.267 に答える