【问题标题】:How to click Windows 8 RichEditBox hyperlinks?如何单击 Windows 8 RichEditBox 超链接?
【发布时间】:2013-09-18 09:17:56
【问题描述】:

也许这是一个愚蠢的问题,但我如何在 Windows 8 RichEditBox 中单击(并捕获单击事件)中的链接。

我使用RichEditBox.Document.GetRange(0, 10).Link = "\"foobar\"" 放置了链接。链接本身显示在RichEditBox 中,但我无法点击它。

感谢您的建议。

【问题讨论】:

    标签: windows-8 microsoft-metro winrt-xaml


    【解决方案1】:

    RichEditBox 缺少 WPF 的 RichTextBoxLinkClicked 事件。无法检测链接是否被点击。您只能通过按 ctrl 并单击链接来打开超链接。

    How can I make a hyperlink work in a RichTextBox? - 这是 WPF 中的内容

    【讨论】:

    • 也有同样的问题。我很惊讶微软没有像往常那样让 RichEditBox 成为一个密封类。
    【解决方案2】:

    这是一个将链接点击事件添加到 RichEditBox 的助手:

    public class LinkClickedEventArgs
    {
        public string LinkText { get; set; }
    }
    
    public class RichEditBoxWithHyperlink :RichEditBox
    {
    
        public event EventHandler<LinkClickedEventArgs> LinkClicked;
        protected override void OnTapped(TappedRoutedEventArgs e)
        {
            base.OnTapped(e);
            if (LinkClicked != null)
            {
                Point tappedPoint = e.GetPosition(this);
                ITextRange textRange = this.Document.GetRangeFromPoint(tappedPoint, PointOptions.ClientCoordinates);
                textRange.StartOf(TextRangeUnit.Link,true);
    
                if (!string.IsNullOrEmpty(textRange.Link))
                {
                    LinkClicked(this, new LinkClickedEventArgs(){LinkText = textRange.Link});
                }
            }
        }
    }
    

    【讨论】:

    • 当控件未启用时,我不会触发 Tapped 事件,并且我 think 只读。我最终对其进行了透明控制,并且还使用了屏幕坐标(GetPosition(null) 和 PointOptions.None),因为它们似乎没有为我正确排列。虽然我使用的是 windows phone 8.1,但我相信这个控件在功能上有一些差异 - 我听说它在桌面上转换为 Xaml,但在手机上是真正的 Rtf。
    猜你喜欢
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 2013-05-19
    相关资源
    最近更新 更多