6

C# コードのuriに問題があります

これは機能しています:

var uri = new Uri("d:/Programozas dotNet/Ugyfel/Ugyfel.ClientWpf/Skins/MainSkin.xaml");

しかし、残念ながらこれらのどれでもない:

var uri = new Uri("/Skins/MainSkin.xaml", UriKind.Relative);
var uri = new Uri("pack://application:,,,/Skins/MainSkin.xaml");
var uri = new Uri("Ugyfel.ClientWpf;/Skins/MainSkin.xaml", UriKind.Relative);

IOException: リソース 'skins/mainskin.xaml' が見つかりません。

絶対ではなく相対URIを使用するにはどうすればよいですか?

4

3 に答える 3

23

それはばかげた間違いでした。正しい方法は、先頭に「/」を付けないことです

var uri = new Uri("Skins/MainSkin.xaml", UriKind.Relative);

あなたの努力に感謝

于 2012-09-05T17:35:46.280 に答える
4

相対URL(WPFまたはその他のデスクトップアプリケーション内)は、Environment.CurrentDirectoryに相対的です。通常、これはexeが存在するフォルダーですが、VSユニットテスト環境では異なる場合があります。

プロジェクトに「Skins」というフォルダがあり、おそらくexeが「bin\debug」にあると思います。

最も簡単な方法は、MainSkin.xamlを出力ディレクトリ(ファイルのプロパティ内)にコピーするように設定して、パスなしで名前だけで参照できるようにすることです。

于 2012-08-30T19:02:51.197 に答える
0

Urikind.Relativeアプリが配置されているのと同じ場所にあるリソースにアクセスしようとしている場合に意味があります。たとえば、このコードでは、アプリのbinフォルダーにある画像を使用しています。

private void btnDisplayDetails_Click(object sender, RoutedEventArgs e)
    {
        Person person = _ucPersons.GetSelectedPerson();
        if (person != null)
        {
            lblName.Content = person.Name;
            lblAge.Content = person.BirthDay.ToShortDateString();
            Uri uri = new Uri( "m_" + person.ImageRef + ".jpg", 
                UriKind.Relative);
            imgPerson.Source = BitmapFrame.Create(uri);
        }
    }

礼儀:このUrikind.relativeの正確な意味


または、ベースURIをすでに定義している場合にも使用されます。UriKindのMSDNリンクを確認してください。

絶対URIは、リソースへの完全な参照(例: http: //www.contoso.com/index.html)によって特徴付けられますが、相対URIは以前に定義されたベースURI(例:/index.html)に依存します。

于 2012-08-30T19:08:07.630 に答える