Электронная почта гиперссылка
Я пытаюсь использовать кнопку гиперссылки в качестве mailto в silverlight 4 примерно так:
<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) Отметка времени: среда, 19 января 2011 г. 14:24:29 UTC
Сообщение: необработанная ошибка в приложении Silverlight Код: 4004
Категория: ManagedRuntimeError
Сообщение: System.ArgumentException: содержимое для URI не может быть загружено. URI может быть недействительным. Имя параметра: uri в System.Windows.Navigation.NavigationService.NavigateCore(Uri uri, режим NavigationMode, логическое подавление JournalAdd, логический isRedirect) в System.Windows.Controls.Frame.Navigate(источник Uri) в MS.Internal.NavryHelperTime) в MS.Internal.NavigationHelper.Navigate(Boolean checkUserInitiatedAction) в System.Windows.Controls.HyperlinkButton.OnClick() в System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonCrol.OnMouseLeftButtonUp(Control Ctrl, EventArgs e) в MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, String eventName)
Я делаю это программно в другом месте, и это работает. Я попробовал тот же самый подход для этого и все еще получаю ошибку.
2 ответа
Я понял. Работающая гиперссылка Button находится в дочернем окне (далеко вложенный элемент управления), а не в шаблоне сайта (дочерний элемент объекта Application). По этой причине кажется, что для гиперссылки в шаблоне сайта должно быть указано TargetName="_blank". Не уверен, почему это так.
Я смог обойти ошибку, добавив событие click в 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"