无法加载URI的内容。 URI可能无效

时间:2012-06-14 08:33:13

标签: c# silverlight exception-handling silverlight-5.0

我必须说我对此感到非常难过,我希望你们中的一些人可能遇到过同样的问题。我有一个HyperlinkBut​​ton,像这样创建:

var hb = new HyperlinkButton
{
     Content = fooText,
     ClickMode = ClickMode.Release,
     NavigateUri = new Uri(fooLink.Value)
};
hb.Click += hb_Click;

static void hb_Click(object sender, RoutedEventArgs e)
{
    var btn = (HyperlinkButton)sender;
    HtmlPage.Window.Navigate(btn.NavigateUri, "_blank");
}

该链接是网站(http://..。)的绝对网址,不在应用程序内。因此,我想在新的浏览器选项卡中打开它。这正是它的作用!该网站在新标签页中打开,但在应用程序标签中我收到此错误:

enter image description here

如果我更改事件处理程序,以便没有目标参数,如下所示:

HtmlPage.Window.Navigate(btn.NavigateUri);

...错误也会出现,就在浏览器导航离开应用程序之前。但我想打开一个新标签。

我正在使用Visual Studio 11中的Silverlight业务应用程序模板,我已经注意到它有一些神秘的错误,这可能就是其中之一。总而言之,它的工作原理,我只需要摆脱错误信息。但是我可以吞下事件处理程序中没有异常抛出。

2 个答案:

答案 0 :(得分:1)

你可以做到这一点:

var hb = new HyperlinkButton
{
     Content = fooText,
     ClickMode = ClickMode.Release,
     NavigateUri = new Uri(fooLink.Value),
     TargetName = "_blank"
};

没有Click事件处理程序。

它应该以更清洁的方式完成您想要的任务。

答案 1 :(得分:0)

试试这个:

    /// <summary>
    /// Hyperlink button - simulates hyperlink click
    /// </summary>
    private class HyperlinkButtonWrapper : HyperlinkButton
    {
        public void OpenURL(string navigateUri)
        {
            OpenURL(new Uri(navigateUri, UriKind.Absolute));
        }

        public void OpenURL(Uri navigateUri)
        {
            base.NavigateUri = navigateUri;
            base.TargetName = "_blank";
            base.OnClick();
        }
    }

    /// <summary>
    /// Method opens url
    /// <para>Example: OpenURL("http://www.google.com")</para>
    /// </summary>
    /// <param name="navigateUri"></param>
    public static void OpenURL(string navigateUri)
    {
        new HyperlinkButtonWrapper().OpenURL(navigateUri);
    }