Joh*_*nan 12 wpf click richtextbox hyperlink ctrl
我有一个WPF RichTextBox isReadOnly设置为True.我希望用户能够点击RichTextBox中包含的HyperLink,而不必按住它们Ctrl.
HyperLink上的Click事件似乎没有触发,除非Ctrl被按下,所以我不确定如何继续.
JHu*_*d80 24
我找到了解决方案.将IsDocumentEnabled设置为"True"并将IsReadOnly设置为"True".
<RichTextBox IsReadOnly="True" IsDocumentEnabled="True" />
Run Code Online (Sandbox Code Playgroud)
一旦我这样做,当我将鼠标悬停在HyperLink标签内显示的文本上时,鼠标将变为"手".单击而不保持控件将触发"Click"事件.
我正在使用.NET 4中的WPF.我不知道.NET的早期版本是否不像我上面描述的那样起作用.
hil*_*lin 13
JHubbard80的答案是一个可能的解决方案,如果您不需要选择内容,这是最简单的方法.
但是我需要:P这是我的方法:为Hyperlinks里面设置一个样式RichTextBox.必不可少的是使用a EventSetter来Hyperlink处理MouseLeftButtonDown事件.
<RichTextBox>
<RichTextBox.Resources>
<Style TargetType="Hyperlink">
<Setter Property="Cursor" Value="Hand" />
<EventSetter Event="MouseLeftButtonDown" Handler="Hyperlink_MouseLeftButtonDown" />
</Style>
</RichTextBox.Resources>
</RichTextBox>
Run Code Online (Sandbox Code Playgroud)
在代码隐藏中:
private void Hyperlink_MouseLeftButtonDown(object sender, MouseEventArgs e)
{
var hyperlink = (Hyperlink)sender;
Process.Start(hyperlink.NavigateUri.ToString());
}
Run Code Online (Sandbox Code Playgroud)
感谢gcores的鼓舞人心.
设法找到了解决办法,这很偶然。
加载到我的RichTextBox中的内容只是作为纯字符串存储(或输入)。我将RichTextBox子类化,以允许对其的Document属性进行绑定。
与这个问题有关的是,我有一个IValueConverter Convert()重载,看起来像这样(解决方案非必需的代码已被剥离):
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;
Run Code Online (Sandbox Code Playgroud)
这使我得到了想要的行为(将纯字符串推入RichTextBox并获得格式设置),并且还导致链接的行为类似于普通链接,而不是嵌入到Word文档中的链接。
| 归档时间: |
|
| 查看次数: |
11766 次 |
| 最近记录: |