2011-01-19 3 views
6

Sto cercando di utilizzare un pulsante di collegamento ipertestuale come mailto in Silverlight 4 in questo modo:email hyperlinkbutton

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

e quando lo scatto nell'applicazione ottengo:

dettagli dell'errore Pagina web

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) Timestamp: Mer 19 Gen 2011 14:24:29 GMT

Messaggio: errore non gestito in Silverlight Codice di applicazione: 4004
Categoria: ManagedRuntimeError
Messaggio: System.ArgumentException: Content perché l'URI non può essere caricato. L'URI potrebbe non essere valido. Parametro nome: uri a System.Windows.Navigation.NavigationService.NavigateCore (Uri uri , modalità NavigationMode, booleano suppressJournalAdd, booleano isRedirect) a System.Windows.Controls.Frame.Navigate (Uri fonte) MS.Internal.NavigationHelper.TryInternalNavigate() a MS.Internal.NavigationHelper.Navigate (booleano checkUserInitiatedAction) a System.Windows.Controls.HyperlinkButton.OnClick() a System.Windows.Controls.Primitives.ButtonBase. OnMouseLeftButtonUp (MouseButtonEventArgs e) al System.Windows.Controls.Control.OnMouseLeftButtonUp (Controllo ctrl, EventArgs) A MS.Internal.JoltHelper.FireEvent (IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, String eventName)

faccio questo programmaticamente altrove e funziona. Ho provato lo stesso approccio per questo e ancora ottengo l'errore.

risposta

8

L'ho capito. Il collegamento ipertestuale che funziona si trova in una finestra secondaria (controllo annidato molto lontano), quello che non è presente nel modello di sito (figlio dell'oggetto Applicazione). Per questo motivo sembra che il collegamento ipertestuale nel modello di sito debba avere TargetName = "_ blank" specificato. Non sono sicuro del perché questo sia.

0

Sono stato in grado di aggirare l'errore aggiungendo un evento click a xaml e archiviando l'url nella proprietà Tag = "".

XAML:

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

Codice Dietro:

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: blocca popup siano ora meno probabilità di essere invocato a causa del cambio della destinazione da " _blank "a" _self "

+0

Da quello che ho visto, qualsiasi metodo diverso da NavigateUri sembra essere bloccato da blocchi popup. Se stai guardando il supporto multi browser questa non è un'opzione. –

+0

Questo è un buon punto, non ho pensato ai blocchi dei popup. Ho cambiato il target del collegamento ipertestuale a "_self" con i blocchi di popup in mente. Poiché l'obiettivo non ha importanza per un mailto: – ShawnFeatherly