如何将WPF RichTextBox中的超链接绑定到命令?

3

在MVVM模式下,如何动态绑定一个ICommand到RichTextBox中超链接的点击事件上?


文本是如何被填充的? - Ray Booysen
2个回答

2
这需要几个步骤,但你可以做到。
  1. 你需要使用一个可绑定的RichTextBox,而不是WPF自带的那个不能绑定。详情请参见:http://michaelsync.net/2009/06/09/bindable-wpf-richtext-editor-with-xamlhtml-convertor

  2. 有了它,你就有了一个可以绑定到ViewModel中的FlowDocument的Rich Text Editor。

  3. 当创建FlowDocument时,请在ViewModel中为Hyperlink.ClickEvent连接处理程序:

下面是添加处理程序到FlowDoc的调用:

TheDocument.AddHandler(Hyperlink.ClickEvent, 
    new RoutedEventHandler(HandleHyperlinkClick));


//Here's the handler definition    
private void HandleHyperlinkClick(object sender, RoutedEventArgs args)
{
    Hyperlink link = args.Source as Hyperlink;
    //...
}

这是我曾经见过的唯一做法。FlowDocuments有点奇怪,因为它们既是数据类型又是视觉元素,所以在某种意义上,将其驻留在ViewModel中似乎不太合适,但这是正确的方法。


我现在正在尝试,但是当我点击链接时什么都没有发生!光标甚至没有变成手...有什么帮助吗? - bluebit
我认为您可能错过了AddHandler调用?我更改了格式,使其更易于查看。 - Anderson Imes
非常感谢!它起作用了,但是当我点击超链接时,URL会显示两次!出了什么问题? - Al___

1

在许多情况下,使用WPF数据绑定是不可能的。在这些情况下,您可以创建一个新控件(例如从RichTextBox继承),并提供缺少的依赖属性,以便您可以使用数据绑定。

然而,为处理简单情况而创建新控件是低效的。在视图的代码后台文件中实现代码并不是被禁止的,这通常比创建新控件更有意义。

该项目的ViewModel示例展示了如何实现此操作的具体示例:

WPF应用程序框架(WAF)

http://waf.codeplex.com


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接