email hyperlinkbutton

2019-02-22 07:09发布

问题:

I'm trying to use a hyperlink button as a mailto in silverlight 4 like so:

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

and when I click it in the application I get:

Webpage error details

User Agent: Mozilla/4.0 (compatible; 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) Timestamp: Wed, 19 Jan 2011 14:24:29 UTC

Message: Unhandled Error in Silverlight Application Code: 4004
Category: ManagedRuntimeError
Message: System.ArgumentException: Content for the URI cannot be loaded. The URI may be invalid. Parameter name: 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() at MS.Internal.NavigationHelper.Navigate(Boolean checkUserInitiatedAction) at System.Windows.Controls.HyperlinkButton.OnClick() at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e) at System.Windows.Controls.Control.OnMouseLeftButtonUp(Control ctrl, EventArgs e) at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, String eventName)

I do this programatically elsewhere and it works. I tried the same approach for this one and still get the error.

回答1:

I figured it out. The hyperlinkButton that works is in a child window (far nested control), the one that doesn't is in the site template (Child of the Application object). For this reason it appears that the hyperlinkbutton in the site template must have TargetName="_blank" specified. Not sure why this is.



回答2:

I was able to work around the error by adding a click event to the xaml and storing the url in the Tag="" property.

XAML:

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

Code Behind:

private void HyperlinkButton_Click(object sender, RoutedEventArgs e)
    {
        HyperlinkButton button = (HyperlinkButton)sender;
        System.Windows.Browser.HtmlPage.Window.Navigate(new Uri(button.Tag.ToString()), "_self");
    }
  • http://forums.silverlight.net/t/245500.aspx/1

EDIT: popup blockers are now less likely to be invoked due to changing the target from "_blank" to "_self"