我有一个WPF的RichTextBox与isReadOnly设置为True。我希望用户能够点击包含在RichTextBox中的超链接,他们无需按住<大骨节病>控制

在超链接的点击事件似乎并不火,除非<大骨节病>控制是持有了,所以我不能确定如何进行。

有帮助吗?

解决方案 3

设法找到解决的办法,非常意外。

这的加载到我的RichTextBox的内容只是存储(或输入),为纯字符串。我已经子类RichTextBox的,以允许针对它的文档属性绑定。

什么是相关的问题是,我有一个的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文档中的链接。

其他提示

我发现了一个解决方案。设置IsDocumentEnabled为“True”和IsReadOnly设置为“真”。

<RichTextBox IsReadOnly="True" IsDocumentEnabled="True" />

在我这样做时,鼠标会变成一个“手”时我悬停在一个超链接标记内显示的文本。点击不保持控制将触发“点击”事件。

我使用WPF从.NET 4.我不知道,如果早期版本的.NET正如我上面描述不起作用。

JHubbard80 的答案是一个可行的解决方案,这是最简单的方式,如果你不需要的内容进行选择

不过,我需要的是:P这里是我的方法:设置样式为HyperlinkRichTextBoxs。基本是使用EventSetter使Hyperlinks处理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。

您是否尝试过处理MouseLeftButtonDown事件,而不是Click事件?

我从@ hillin的回答改变EventSetter。 的MouseLeftButtonDown 的在我的代码(.NET框架4.5.2)没有工作。

<EventSetter Event="RequestNavigate" Handler="Hyperlink_RequestNavigate" />
private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e)
{
    Process.Start(e.Uri.ToString());
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top