Электронная почта гиперссылка

Я пытаюсь использовать кнопку гиперссылки в качестве 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"

Другие вопросы по тегам