6

我正在尝试在 silverlight 4 中使用超链接按钮作为 mailto,如下所示:

<HyperlinkButton x:Name="hlbCustomerSupport" NavigateUri="mailto:customerservice@fofo.com" Content="customerservice@fofo.com"></HyperlinkButton>

当我在应用程序中单击它时,我得到:

网页错误详情

用户代理:Mozilla/4.0(兼容;MSIE 8.0;Windows NT 6.1;Trident/4.0;SLCC2;.NET CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729;Media Center PC 6.0;InfoPath。 2;.NET4.0C;.NET4.0E) 时间戳:2011 年 1 月 19 日星期三 14:24:29 UTC

消息:Silverlight 应用程序代码中未处理的错误:4004
类别:ManagedRuntimeError
消息:System.ArgumentException:无法加载 URI 的内容。URI 可能无效。参数名称: uri at System.Windows.Navigation.NavigationService.NavigateCore(Uri uri, NavigationMode mode, Boolean suppressJournalAdd, Boolean isRedirect) at System.Windows.Controls.Frame.Navigate(Uri source) at MS.Internal.NavigationHelper.TryInternalNavigate( ) 在 MS.Internal.NavigationHelper.Navigate(Boolean checkUserInitiatedAction) 在 System.Windows.Controls.HyperlinkBut​​ton.OnClick() 在 System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e) 在 System.Windows.Controls.Control。 MS.Internal.JoltHelper.FireEvent 处的 OnMouseLeftButtonUp(Control ctrl,EventArgs e)(IntPtr unmanagedObj,IntPtr unmanagedObjArgs,Int32 argsTypeIndex,字符串 eventName)

我在其他地方以编程方式执行此操作,并且可以正常工作。我为此尝试了相同的方法,但仍然出现错误。

4

2 回答 2

8

我想到了。有效的超链接按钮位于子窗口(远嵌套控件)中,而无效的则位于站点模板(应用程序对象的子级)中。因此,站点模板中的超链接按钮似乎必须指定 TargetName="_blank"。不知道为什么会这样。

于 2011-01-19T16:19:02.670 回答
0

通过向 xaml 添加单击事件并将 URL 存储在 Tag="" 属性中,我能够解决该错误。

XAML:

<HyperlinkButton Content="PDR Drug Handbook" Tag="http://www.pdrhealth.com/" FontSize="14" Click="HyperlinkButton_Click" />

代码背后:

private void HyperlinkButton_Click(object sender, RoutedEventArgs e)
    {
        HyperlinkButton button = (HyperlinkButton)sender;
        System.Windows.Browser.HtmlPage.Window.Navigate(new Uri(button.Tag.ToString()), "_self");
    }

编辑:由于将目标从“_blank”更改为“_self”,现在不太可能调用弹出窗口阻止程序

于 2012-02-07T22:52:15.913 回答