Пример использования гиперссылки в WPF

Я видел несколько предложений, которые вы можете добавить гиперссылку на приложение WPF через управление Hyperlink .

Вот как я пытаюсь использовать его в своем коде:

              Click here             

Я получаю следующую ошибку:

Свойство «Текст» не поддерживает значения типа «Гиперссылка».

Что я делаю не так?

Если вы хотите, чтобы ваше приложение открыло ссылку в веб-браузере, вам нужно добавить HyperLink с событием RequestNavigate, установленным на функцию, которая программным образом открывает веб-браузер с адресом в качестве параметра.

   Click here   

В коде нужно добавить что-то подобное этому для обработки события RequestNavigate.

 private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e) { Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri)); e.Handled = true; } 

Кроме того, вам также понадобится следующий импорт.

 using System.Diagnostics; using System.Windows.Navigation; 

Это будет выглядеть в вашем приложении.

оо

В дополнение к ответу Fuji мы можем сделать обработчик повторно используемым, превратив его в прикрепленное свойство:

 public static class HyperlinkExtensions { public static bool GetIsExternal(DependencyObject obj) { return (bool)obj.GetValue(IsExternalProperty); } public static void SetIsExternal(DependencyObject obj, bool value) { obj.SetValue(IsExternalProperty, value); } public static readonly DependencyProperty IsExternalProperty = DependencyProperty.RegisterAttached("IsExternal", typeof(bool), typeof(HyperlinkExtensions), new UIPropertyMetadata(false, OnIsExternalChanged)); private static void OnIsExternalChanged(object sender, DependencyPropertyChangedEventArgs args) { var hyperlink = sender as Hyperlink; if ((bool)args.NewValue) hyperlink.RequestNavigate += Hyperlink_RequestNavigate; else hyperlink.RequestNavigate -= Hyperlink_RequestNavigate; } private static void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e) { Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri)); e.Handled = true; } } 

И используйте его вот так:

   Click here   

Hyperlink не является элементом управления, это элемент содержимого streamа , его можно использовать только в элементах управления, которые поддерживают stream streamа, например TextBlock . TextBoxes имеет только обычный текст.

Если вы хотите локализовать строку позже, то этих ответов недостаточно, я бы предложил что-то вроде:

        

IMHO самым простым способом является использование нового Hyperlink управления, унаследованного от Hyperlink :

 ///  /// Opens  in a default system browser ///  public class ExternalBrowserHyperlink : Hyperlink { public ExternalBrowserHyperlink() { RequestNavigate += OnRequestNavigate; } private void OnRequestNavigate(object sender, RequestNavigateEventArgs e) { Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri)); e.Handled = true; } } 

Также обратите внимание, что Hyperlink не должна использоваться для навигации. Вы можете подключить его к команде.

Например:

  Clear  

Мне понравилась идея Артура о многократном обработчике, но я думаю, что есть более простой способ сделать это:

 private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e) { if (sender.GetType() != typeof (Hyperlink)) return; string link = ((Hyperlink) sender).NavigateUri.ToString(); Process.Start(link); } 

Очевидно, что могут возникнуть угрозы безопасности при запуске любого процесса, поэтому будьте осторожны.

Надеюсь, что это тоже поможет кому-то.

 using System.Diagnostics; using System.Windows.Documents; namespace Helpers.Controls { public class HyperlinkEx : Hyperlink { protected override void OnClick() { base.OnClick(); Process p = new Process() { StartInfo = new ProcessStartInfo() { FileName = this.NavigateUri.AbsoluteUri } }; p.Start(); } } } 
  • jQuery отключить ссылку
  • C # regex pattern для извлечения URL-адресов из заданной строки - не полный URL-адрес html, но также и ссылки
  • Scrapy: Следуйте ссылке, чтобы получить дополнительные данные элемента?
  • Откройте внешние ссылки в браузере с веб-браузером Android
  • Facebook share link - можете ли вы настроить текст сообщения?
  • Найти имя пакета для приложений Android, чтобы использовать Intent для запуска приложения Market из Интернета
  • Как создать прямую ссылку на любую коробку fancybox
  • Изменить цвет текста в тексте TextView и щелкнуть?
  • Interesting Posts

    Будет ли мой USB-накопитель быстрее умирать, если я буду смотреть фильмы прямо из него?

    Ящик навигации (Google+ и YouTube)

    Как отключить вкладку внутри TabControl?

    Можно ли связать команды привязки ключей в возвышенном тексте 2?

    Entity Framework 6 GUID как первичный ключ: не может вставить значение NULL в столбец «Id», таблицу «FileStore»; столбец не допускает

    Как скрыть пункт меню на панели действий?

    Есть ли замена на основе задачи для System.Threading.Timer?

    Каков правильный способ перегрузить operator == для иерархии classов?

    Переход в каталог с использованием переменных bash не работает, если имена каталогов имеют пробелы

    В чем сложность этого простого кода?

    Как заставить TaskScheduler сбой, когда задача возвращает результат, отличный от 0

    Преобразование метки времени целых чисел в дату java

    Как проверить, находится ли точка внутри выпуклого многоугольника в двумерных целочисленных координатах?

    Скрыть окно консоли с Process.Start C #

    Как добавить временную метку в redirect STDERR

    Давайте будем гением компьютера.