0

WPF アプリケーションでフロアのギャラリーを構築しています。csv ファイルから画像名を読み込んでおり、ユーザーは画像を Resources フォルダーに直接コピーします。

StreamReader streamReader = new StreamReader(
    (Application.Current as PlayOnSurface.App).ProjectAmenitiesCSVPath);
// browse the csv file line by line until the end of the file
while (!streamReader.EndOfStream)
{
    // for each line, split it with the split caractere (that may no be ';')
    var splitLine = streamReader.ReadLine().Split('~');

    if (int.Parse(splitLine[0].Trim())
        == (Application.Current as PlayOnSurface.App).SelectedFloorID)
    {
        for (int i = 2; i < splitLine.Length; i++)
        {
            ImageList.Add(splitLine[i].Trim());
        }
    }
    // map the splitted line with an entity
}
streamReader.Close();

btnPrev.IsEnabled = false;
if (ImageList.Count <= 1)
    btnNext.IsEnabled = false;
imgGallery.Source = Utilities.LoadBitmapFromResource(
    "Resources/Amenities/" + ImageList[0],
    null);

ユーティリティ コード

    public static BitmapImage LoadBitmapFromResource(string pathInApplication, Assembly assembly = null)
        {
            if (assembly == null)
            {
                assembly = Assembly.GetCallingAssembly();
            }

            if (pathInApplication[0] == '/')
            {
                pathInApplication = pathInApplication.Substring(1);
            }
            return new BitmapImage(new Uri(@"pack://application:,,,/" + assembly.GetName().Name + ";component/" + pathInApplication, UriKind.Absolute));
        }

プロジェクトの Resources フォルダーに追加できず、リソースを埋め込むことができません。これは、ユーザーが Resources フォルダーにファイルをコピーし、展開後に csv ファイルを更新する必要があるためです。

imgGallery.Source私のコードはそれを読み取ってギャラリーを表示しますが、その場合、上記のコードで画像をオンラインでロードするときに、WPF は「リソースが見つかりません」という例外をスローします。

私のcsvファイル形式:

1~FirstFloor~img1.png~img2.png~img3.png
2~SecondFloor~img1.png~img2.png~img3.png
3~ThirdFloor~img1.png~img2.png~img3.png
4~FourthFloor~img1.png~img2.png~img3.png
4

2 に答える 2

0

URI スキームで間違った機関を使用しています。アプリケーション権限は、コンパイル時に認識されるデータ ファイル (別名静的リソース) に使用されます。これを siteoforigin Authority に置き換える必要があります。

また、独自のテキスト ファイル形式を標準の CSV ファイルに置き換えることもお勧めします。Excel などの多くのプログラムは、デフォルトでコンマ区切りフィールドの生成をサポートしています。カスタム セパレータを配置することもできますが、通常は追加の作業が必要です。コンマ区切りファイルの読み取りと解析も、これらのタスクを実行するために多くのライブラリが利用できるため、簡単です。

于 2013-07-03T17:33:26.080 に答える