1

我必须说我对此感到很困惑,我希望你们中的一些人可能遇到过同样的问题。我有一个 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");
}

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

在此处输入图像描述

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

HtmlPage.Window.Navigate(btn.NavigateUri);

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

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

4

2 回答 2

1

你可以这样做:

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

没有 Click 事件处理程序。

它应该以更清洁的方式完全按照您的意愿行事。

于 2012-06-14T14:37:19.790 回答
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);
    }
于 2012-06-14T10:21:55.573 回答