4

私はユーザーコントロールを開発していて、それをElementHost内で使用しています。リソースディクショナリを次のように定義します。

<UserControl.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/Themes/Classic.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary> 
    </UserControl.Resources>

私のVSエクスプローラーでは、これがあります

Project (the user control library)
  |_ Themes
       |__ Generic.xaml  (Build Action = Page)
       |__ Classic.xaml  (Build Action = Page)

コンパイルエラーはなく、VSデザイナーはClassic.xamlで定義されたリソースを取得しているようです

ただし、次の例外を除いて、実行時にクラッシュします。

System.Reflection.TargetInvocationException:呼び出しのターゲットによって例外がスローされました。---> System.Reflection.TargetInvocationException:呼び出しのターゲットによって例外がスローされました。---> System.Reflection.TargetInvocationException:呼び出しのターゲットによって例外がスローされました。---> System.Windows.Markup.XamlParseException:'プロパティの設定'System.Windows.ResourceDictionary.Source'が例外をスローしました。行番号「16」および行位置「18」。---> System.IO.IOException:リソース'themes/classic.xaml'が見つかりません。

どうしたの?

4

2 に答える 2

9

アセンブリ名を含む構文を使用する必要がありました...理由を聞かないでください

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/assemblyname;component/Themes/Classic.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary> 
</UserControl.Resources>
于 2012-07-31T14:05:30.100 に答える
1

こんにちは、スラッシュなしで試してください。ビルドアクションがコンテンツまたはその他の場合はスラッシュを使用しますが、ResourceDictionaryのビルドアクションはページです。

 <ResourceDictionary Source="Themes/Classic.xaml"/>
 <ResourceDictionary Source="Themes/Generic.xaml"/>

これがお役に立てば幸いです。同じプロジェクトのThemesフォルダーではGeneric.xamlがデフォルトとして使用され、そのリソースにマージせずにアクセスできるため、これらのリソースディクショナリには他の名前を付ける必要があります。

于 2012-07-27T16:59:37.660 に答える