这个 Urikind.relative 到底是什么意思?

8

我正在做的是,当我选择一行并点击显示按钮时,我将拥有一个datagridview,并希望显示该行的图像以及一些信息。为此,我编写了以下代码:

public partial class WpfWindow : Window
{
    private UCPersons _ucPersons;

    public WpfWindow()
    {
        InitializeComponent();

        // Create WinForms Usercontrol and 
        // add it to the WindowsFormsHost
        _ucPersons = new UCPersons();
        winFormHost.Child = _ucPersons;

        List<Person> persons = CreateSamplePersons();
        _ucPersons.SetData(persons);


    }

    private List<Person> CreateSamplePersons()
    {
        List<Person> persons = new List<Person>();
        persons.Add(Person.Create("Dorababu", "Madhuranagar", "Hyd", 
            DateTime.Now.AddYears(-34), "1"));

        persons.Add(Person.Create("Krish", "Sat", "RJY",
            DateTime.Now.AddYears(-64), "2"));


        return persons;
    }

    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);
        }
    }
}

如果我将图像从Bin中复制并粘贴到其他地方,它就不能正常工作。

因此,我想了解一些关于UriKInd的知识。


1
我们需要更多的上下文信息-您在使用这个Uri做什么? - Jon Skeet
我正在使用 Uri 创建确切名称的引用。 - Developer
“for the exact name”是什么意思?听起来像是相对URI将会相对于您的bin目录进行解析...如果您使用完全相同的代码但图像不在bin目录中,您如何期望找到它呢? - Jon Skeet
是的,它只在bin中但如果在bin之外,我如何通过UriKind获取它。 - Developer
1
你需要包含一个相对路径名,例如 "../images/person.jpg"。但是,我不确定WPF是否允许您像那样跳出当前目录。您可能需要直接打开文件流,并将流传递给BitmapFrame.Create。 - Jon Skeet
2个回答

12
相对路径与绝对路径。"chicken/pot/pie.jpg" 是相对路径,因为它是相对于当前目录的。C:/images/food/chicken/pot/pie.jpg 则是绝对路径,因为它相对于驱动器的根目录
初始化 Uri 的唯一真正目的是避免(或引起)当Uri不规范时产生的异常;在Uri未预定时很有用。 MSDN 参考 引用:

相对和绝对 URI 在其格式上有不同的限制。例如,相对 URI 不需要方案或授权。您在 uriKind 中指定的值必须与传递给 uriString 的 URI 类型相匹配。但是,如果指定了RelativeOrAbsolute,则 URI 字符串可以是相对的或绝对的。


10

这表示它是一个相对URI——但如果您不提供更多信息,我们就不知道它相对于什么。

举个例子,在这里的URI是相对的:

<img src="person.jpg" />

虽然这个相对路径只依赖于现有的主机/端口/协议,而非当前 URI 的路径,因此在某些方面“相对较少”,但是它仍然是一个相对路径:

<img src="/images/person.jpg" />

这是绝对的,它包含所有必要的信息,没有其他上下文:

<img src="http://microsoft.com/images/person.jpg" />

根据UriKind文档

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

没有更多信息很难确定您遇到了什么问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接