在按住CTRL的情况下单击RichTextBox中的超链接 - WPF
我有一个WPF RichTextBox,其中isReadOnly
设置为True
。我希望用户能够点击RichTextBox中包含的超链接,而不必按住Ctrl。在按住CTRL的情况下单击RichTextBox中的超链接 - WPF
HyperLink上的Click事件似乎不会触发,除非Ctrl被限制,所以我不确定如何继续。
设法找到解决方法,几乎是偶然。
加载到我的RichTextBox中的内容仅作为普通字符串存储(或输入)。我已经将RichTextBox子类化为允许绑定它的Document属性。
有什么相关的问题是,我有一个的IValueConverter转换()重载,看起来像这样(代码非必要的解决方案已被剥离出来):
FlowDocument doc = new FlowDocument();
Paragraph graph = new Paragraph();
Hyperlink textLink = new Hyperlink(new Run(textSplit));
textLink.NavigateUri = new Uri(textSplit);
textLink.RequestNavigate +=
new System.Windows.Navigation.RequestNavigateEventHandler(navHandler);
graph.Inlines.Add(textLink);
graph.Inlines.Add(new Run(nonLinkStrings));
doc.Blocks.Add(graph);
return doc;
这让我的我想要的行为(将简单的字符串引入RichTextBox并获取格式),并且它还会生成类似于普通链接的链接,而不是嵌入Word文档中的链接。
var textSplit在哪里以及如何创建? – 2015-01-27 17:52:00
您是否尝试过处理MouseLeftButtonDown事件而不是Click事件?
我找到了解决方案。将IsDocumentEnabled设置为“True”并将IsReadOnly设置为“True”。
<RichTextBox IsReadOnly="True" IsDocumentEnabled="True" />
一旦我这样做了,当我将鼠标悬停在HyperLink标签中显示的文本上时,鼠标就会变成“手”。点击没有控制将触发'点击'事件。
我使用.NET 4中的WPF。我不知道早期版本的.NET是否无法正常工作,如上所述。
JHubbard80的答案是一个可能的解决方案,这是最简单的方法,如果你不需要选择内容。
但是我需要:P这里是我的方法:为RichTextBox
中的Hyperlink
s设置样式。必要的是使用EventSetter
来使Hyperlink
处理MouseLeftButtonDown
事件。
<RichTextBox>
<RichTextBox.Resources>
<Style TargetType="Hyperlink">
<Setter Property="Cursor" Value="Hand" />
<EventSetter Event="MouseLeftButtonDown" Handler="Hyperlink_MouseLeftButtonDown" />
</Style>
</RichTextBox.Resources>
</RichTextBox>
而在代码隐藏:
private void Hyperlink_MouseLeftButtonDown(object sender, MouseEventArgs e)
{
var hyperlink = (Hyperlink)sender;
Process.Start(hyperlink.NavigateUri.ToString());
}
感谢gcores为inspiaration。
已经感谢Skeet了?非常棘手! – Anthony 2009-04-17 21:32:38
@Anthony,这是一个签名(查看拼写) – JaredPar 2009-04-17 21:34:39
Hehehe,我其实是John,但是如果Skeet来了,我一定会感谢他:) – 2009-04-17 22:10:19