uri相对vs绝对

时间:2012-08-30 18:53:07

标签: c# uri

我的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?

3 个答案:

答案 0 :(得分:7)

这是一个愚蠢的错误。正确的方法是没有前导“/”

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

感谢您的努力

答案 1 :(得分:4)

相对网址(在WPF或任何其他桌面应用程序中)与Environment.CurrentDirectory相关。通常这是您的exe所在的文件夹,但在VS Unit Testing环境中可能会有所不同。

我假设您的项目中有一个名为“Skins”的文件夹,可能您的exe文件位于“bin \ debug”中。

最简单的方法是将MainSkin.xaml设置为复制到输出目录(在文件属性中),这样您就可以仅使用没有路径的名称来引用它。

答案 2 :(得分: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);
        }
    }

礼貌:What exactly mean by this Urikind.relative


或者,当您已经定义了基本URI时,也会使用它。查看UriKind MSDN link

  

绝对URI的特点是完整引用   资源(例如:http://www.contoso.com/index.html),而a   相对Uri依赖于先前定义的基URI(例如:   /index.html)。