1

FrameworkElement の外部で使用したい xaml ResourceDictionary を含むプロジェクトがあります。リソース ディクショナリには、app.xaml の汚染を避けるために、プロジェクトにローカルなクラスの DataTemplate が含まれます (プロジェクトはプリズム モジュールであり、構成によっては常に存在するとは限りません)。

したがって、リソース ビルド アクションを含む test.xaml ファイルがあります。

これは、TestObject クラスの DataTemplate を提供するためのものです。

TestObject クラスには GetTemplate() メソッドがあります

以下の作品:

DataTemplate GetTemplate()
{
    Uri uri = new Uri("MyProject;component/test.xaml", UriKind.Relative);

    var dict = new ResourceDictionary { Source = uri};

    return (DataTemplate)dict["TestObjectDataTemplate"];
}

uri を ResourceDictionary.Source プロパティに割り当てると、例外がスローされます。

DataTemplate GetTemplate()
{
    Uri uri = new Uri("/test.xaml", UriKind.Relative);

    var dict = new ResourceDictionary { Source = uri};

    return (DataTemplate)dict["TestObjectDataTemplate"];
}

2 番目の例は、ローカル アセンブリで /test.xaml が見つからないため失敗します。"ReferencedAssembly;component/test.xaml" でアクセスする必要があるのはなぜですか?

この場合、ローカル アセンブリは、実行中のアセンブリまたはコード/リソースが含まれるアセンブリを意味しますか?

編集:実際の問題を反映するように更新されました。

4

2 に答える 2

2

試してみてくださいUriKind.RelativeOrAbsolute

より明確に好きです。

    DataTemplate GetTemplate()
    {           
        ResourceDictionary resource = new ResourceDictionary()
        {
            Source = new Uri(@"/AssemblyFullName;component/test.xaml", UriKind.RelativeOrAbsolute)
        };

        return (DataTemplate)resource["TestObjectDataTemplate"];
    }

編集:

この場合、ローカル アセンブリは、実行中のアセンブリまたはコード/リソースが含まれるアセンブリを意味しますか?

たとえば
、プロジェクト A とプロジェクト B の 2 つのプロジェクトがあるとします。

プロジェクト A をプロジェクト B の参照として使用している

今、このようにリソースを使用したい場合/test.xaml。次に、このリソースはプロジェクト B に存在する必要があります。これは、実行中のアセンブリであるためです。[プロジェクト A とプロジェクト B の両方で使用できます。上記の構文を使用できます。のように /test.xaml]

リソースをプロジェクト A 内で定義して使用する場合"/ProjectA;component/test.xaml"は、現在実行中のアセンブリではないため、使用する必要があります。[プロジェクト A とプロジェクト B の両方で使用でき"/ProjectA;component/test.xaml"ます。両方のプロジェクトでアクセスするには、これを使用する必要があります]

于 2010-10-29T09:03:03.337 に答える
1

attr を設定するSourceと、多くのプロジェクトでうまく使用できました。
あなたUriは間違っているかもしれません。次のような完全修飾パック Uri を試す必要があります。

dict.Source = new Uri("pack://application:,,,/test.xaml");

ファイルがプロジェクト ルートにない場合test.xamlは、そのパスを正しく設定してください。

于 2010-10-29T09:09:24.193 に答える