2

これらの方法を使用して画像とリソースディレクトリを動的にロードしていますが、すべての場合に機能するとは限りません

new Uri(@"pack://application:,,/Images/lession_tab.png");

このメソッドは画像では機能しませんが、リソースファイルでは機能します。

new Uri("/project;component/Resources/Dictionary1.xaml", UriKind.Relative);

このメソッドはリソースディレクトリでは機能しませんが、イメージでは機能します。

これを正しくパック://アプリケーションで取得してローカルアセンブリパスを取得している場合、これが画像に対して機能しないのはなぜですか?
例外が発生していますリソース'images/lession_tab.png'が見つかりません。

4

2 に答える 2

2

IIRCでは、画像はデフォルトで「リソースとして」ではなく「コンテンツとして」プロジェクトに追加されます。このURI構文で「コンテンツ」を参照できるかどうかはわかりません。彼らは何を構築していますか?リソースまたはコンテンツ?コンテンツの場合は、「/ blah/image.png」のようなプレーンURLを使用する必要があると思います。http://msdn.microsoft.com/en-us/library/aa970069.aspxを確認してください。ただし、いくつかの場所に奇妙な表現があります。

もう1つは、パック/アプリケーションに3つのコンマpack://application:,,,/ContentFile.xamlがあることです。2つではないようです。各「、」は空のサブロケーターを表します。場所の意味が変わるので、必ず3つ試してみてください。

于 2012-08-31T08:39:10.457 に答える
1

ビルドアクション=リソースおよび出力ディレクトリへのコピー=最初のケースではコピーしないを設定してみてください。

また、次のスニペットを使用して「リソース」アイテムを読み込むことができます。

public static class UriHelper
{
    /// <summary>
    /// Gets absulute URI for provided relative path
    /// </summary>
    /// <param name="baseType">Base type for ussage as URI root</param>
    /// <param name="relativePath">Relative path</param>
    /// <returns>Absolute Uri</returns>
    public static Uri GetUri(Type baseType, string relativePath)
    {
        Assembly oAssembly = Assembly.GetAssembly(baseType);
        AssemblyName oName = oAssembly.GetName();
        return new Uri( 
                String.Format(
                    "pack://application:,,,/{0};v{1};component/{2}",
                    oName.Name,
                    oName.Version.ToString(),
                    relativePath), 
                UriKind.Absolute);
    }
}
于 2012-08-31T08:37:57.377 に答える