2011-01-19 30 views
6

Próbuję użyć przycisku hiperłącza jako mailto w Silverlight 4 tak:email hyperlinkbutton

<HyperlinkButton x:Name="hlbCustomerSupport" NavigateUri="mailto:[email protected]" Content="[email protected]"></HyperlinkButton> 

i po kliknięciu go w aplikacji pojawia się:

szczegóły błędu internetowa

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.307 29; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E) Datownik: Wed, 19 stycznia 2011 14:24:29 UTC

Wiadomość: Unhandled Błąd w kodzie aplikacji Silverlight : 4004
Kategoria: ManagedRuntimeError
Wiadomość: System.ArgumentException: Content dla identyfikatora URI nie można załadować. Identyfikator URI może być nieprawidłowy. Parametr nazwa: URI w URI ( System.Windows.Navigation.NavigationService.NavigateCore URI trybie NavigationMode, logiczną suppressJournalAdd, logiczna isRedirect) w System.Windows.Controls.Frame.Navigate (URI źródła) w MS.Internal.NavigationHelper.TryInternalNavigate() w MS.Internal.NavigationHelper.Navigate (logiczna checkUserInitiatedAction) w System.Windows.Controls.HyperlinkButton.OnClick() w System.Windows.Controls.Primitives.ButtonBase. OnMouseLeftButtonUp (MouseButtonEventArgs e) at System.Windows.Controls.Control.OnMouseLeftButtonUp (Control ctrl, EventArgs e) w MS.Internal.JoltHelper.FireEvent (IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, String EventName)

zrobić to programowo gdzie indziej i działa. Próbowałem tego samego podejścia do tego i nadal dostaję błąd.

Odpowiedz

8

Wymyśliłem to. Działający odnośnik hiperłącza znajduje się w oknie podrzędnym (kontrola zagnieżdżona), którego nie ma w szablonie serwisu (obiekt Child of the Application). Z tego powodu wydaje się, że przycisk hiperłącza w szablonie witryny musi mieć określony parametr TargetName = "_ blank". Nie wiem, dlaczego tak jest.

0

Udało mi się obejść błąd poprzez dodanie zdarzenia kliknięcia do pliku xaml i zapisanie adresu URL we właściwości Tag = "".

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"); 
    } 

EDIT: blokery popup są teraz mniej prawdopodobne, aby być wywołany na skutek zmiany celu z " _blank "to" _self "

+0

Z tego, co widziałem, każda inna metoda niż za pośrednictwem NavigateUri wydaje się być blokowana przez blokery wyskakujące. Jeśli patrzysz na obsługę wielu przeglądarek, nie jest to opcja. –

+0

To dobra uwaga, nie myślałem o blokach wyskakujących okienek. Zmieniłem cel hiperłącza na "_self" z myślą o blokach wyskakujących okienek. Ponieważ cel nie ma znaczenia dla mailto: – ShawnFeatherly