如何获取FlowDocument超链接以启动浏览器并转到WPF应用程序中的URL?
WPF应用程序中的以下代码创建一个超链接,其外观和行为类似于超链接,但在单击时不执行任何操作。
我需要更改什么,以便当我单击它时,它会打开默认浏览器并转到指定的URL?
替代文字https://www.deviantsart.com/upload/4fbnq2.png
XAML:
代码背后:
using System; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; namespace TestLink238492 { public partial class Window1 : Window { public Window1() { InitializeComponent(); FlowDocumentScrollViewer fdsv = new FlowDocumentScrollViewer(); FlowDocument doc = new FlowDocument(); fdsv.Document = doc; fdsv.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden; doc.PagePadding = new Thickness(0); Paragraph paragraph = new Paragraph(); doc.Blocks.Add(paragraph); Run run = new Run("this is flow document text and "); paragraph.Inlines.Add(run); Run run2 = new Run("this is a hyperlink"); Hyperlink hlink = new Hyperlink(run2); hlink.NavigateUri = new Uri("https://www.google.com"); paragraph.Inlines.Add(hlink); StackPanel sp = new StackPanel(); TextBlock tb = new TextBlock(); tb.Text = "this is textblock text"; sp.Children.Add(tb); sp.Children.Add(fdsv); MainArea.Content = sp; } } }
我找到了这个答案,你必须自己添加RequestNavigate并自行处理:
Run run2 = new Run("this is a hyperlink"); Hyperlink hlink = new Hyperlink(run2); hlink.NavigateUri = new Uri("https://www.google.com"); hlink.RequestNavigate += new System.Windows.Navigation.RequestNavigateEventHandler(hlink_RequestNavigate); paragraph.Inlines.Add(hlink); void hlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e) { Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri)); e.Handled = true; }
得到了这个Poma的解决方案。 下面的代码部分应该添加到您需要执行此操作的类中。 或者你可以把它放在某个地方的静态类中,如果你需要从多个文件中获取它。 我已经稍微调整了一下我正在做的事情。
#region Activate Hyperlinks in the Rich Text box //https://stackoverflow.com/questions/5465667/handle-all-hyperlinks-mouseenter-event-in-a-loaded-loose-flowdocument void SubscribeToAllHyperlinks(FlowDocument flowDocument) { var hyperlinks = GetVisuals(flowDocument).OfType(); foreach (var link in hyperlinks) link.RequestNavigate += new System.Windows.Navigation.RequestNavigateEventHandler(link_RequestNavigate); } public static IEnumerable GetVisuals(DependencyObject root) { foreach (var child in LogicalTreeHelper.GetChildren(root).OfType ()) { yield return child; foreach (var descendants in GetVisuals(child)) yield return descendants; } } void link_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e) { //https://stackoverflow.com/questions/2288999/how-can-i-get-a-flowdocument-hyperlink-to-launch-browser-and-go-to-url-in-a-wpf Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri)); e.Handled = true; } #endregion Activate Hyperlinks in the Rich Text box
你会在你的代码中这样称呼它:
string xaml = HTMLConverter.HtmlToXamlConverter.ConvertHtmlToXaml(this.itemControl.NotificationItem.Body, true); FlowDocument flowDocument = XamlReader.Load(new XmlTextReader(new StringReader(xaml))) as FlowDocument; SubscribeToAllHyperlinks(flowDocument); bodyFlowDocument.Document = flowDocument;
所有HTMLConverter的东西都可以在以下url找到: http : //blogs.msdn.com/b/wpfsdk/archive/2006/05/25/606317.aspx那就是你需要将HTML转换为流文档。 虽然,这略微超出了本主题的范围。
上述就是C#学习教程:如何获取FlowDocument超链接以启动浏览器并转到WPF应用程序中的URL?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1037667.html