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 的相对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 回答