Пример использования гиперссылки в 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(); } } } 
  • Как я могу сделать ссылку на клики в NSAttributedString?
  • Как создать ссылки в текстовом клиенте?
  • Что такое синтаксис RTF для гиперссылки?
  • Как сохранить: активный стиль css после нажатия элемента
  • Может ли Google Chrome открывать локальные ссылки?
  • Facebook share link - можете ли вы настроить текст сообщения?
  • C # regex pattern для извлечения URL-адресов из заданной строки - не полный URL-адрес html, но также и ссылки
  • Откройте внешние ссылки в браузере с веб-браузером Android
  • Interesting Posts

    Как отправить несколько изображений на сервер с помощью MultipartEntity от android

    Удалить дубликаты из более чем 150 000 закладок в Google Chrome

    Исправить поврежденные блоки на жестком диске Mac

    Наличие Windows 7 «Сортировка по типу файла» по умолчанию

    WPF StringFormat на содержании ярлыков

    Обрезка PDF с использованием Ghostscript 9.01

    Почему условный ход не уязвим для отказа от ветвления?

    React «не может читать свойство неопределенного» при использовании карты

    Запрос LINQ для возврата словаря

    Эффективно конвертировать между шестнадцатеричными, двоичными и десятичными в C / C ++

    Пользовательский список языков LibreOffice (для документа, выбора, абзаца)

    React не перезагружает данные компонента при изменении параметров маршрута или изменении запроса

    В c ++ что означает тильда «~» перед именем функции?

    Использование GNU Readline; как я могу добавить ncurses в ту же программу?

    Когда Asp.Net удаляет устаревшие элементы кэша?

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