我必须说我对此感到非常难过,我希望你们中的一些人可能遇到过同样的问题。我有一个HyperlinkButton,像这样创建:
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://..。)的绝对网址,不在应用程序内。因此,我想在新的浏览器选项卡中打开它。这正是它的作用!该网站在新标签页中打开,但在应用程序标签中我收到此错误:
如果我更改事件处理程序,以便没有目标参数,如下所示:
HtmlPage.Window.Navigate(btn.NavigateUri);
...错误也会出现,就在浏览器导航离开应用程序之前。但我想打开一个新标签。
我正在使用Visual Studio 11中的Silverlight业务应用程序模板,我已经注意到它有一些神秘的错误,这可能就是其中之一。总而言之,它的工作原理,我只需要摆脱错误信息。但是我可以吞下事件处理程序中没有异常抛出。
答案 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);
}