Пример использования гиперссылки в 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?
  • Как добавить гиперссылку в JLabel
  • Использование jQuery для программного перехода по ссылке
  • jQuery отключить ссылку
  • Как сделать кнопку похожим на ссылку?
  • Может ли Google Chrome открывать локальные ссылки?
  • Изменить цвет текста в тексте TextView и щелкнуть?
  • html ссылки не работают (с использованием base href)
  • Давайте будем гением компьютера.