【问题标题】:How to use RichTextBlock.HasOverflowContent in WP 8.1 RT?如何在 WP 8.1 RT 中使用 RichTextBlock.HasOverflowContent?
【发布时间】:2015-11-23 11:02:24
【问题描述】:

我在 Windows Phone 8.1 RT 中使用RichTextBlock 来显示一些文本。为了限制在给定时间可以显示的文本大小,我设置了MaxLines 属性。每当文本超过此值时,就会对其进行修剪。

现在,我在RichTextBlock 底部有一个超链接,只要文本被修剪,它就会变得可见。为了检测文本是否被修剪,我使用了RichTextBlock.HasOverflowContent。如果此属性设置为 true,我将超链接的可见性设置为可见,以便用户可以单击它并查看完整的未修剪消息。

但是这个解决方案有一个问题。有时文本被修剪,但属性仍然为 false,超链接保持隐藏状态。

我真的不知道如何使用上述属性来检测内容修剪。使用它的正确方法是什么?我正在处理RichTextBlockLoaded 事件:

private void RichTextBlock_Loaded(object sender, RoutedEventArgs e)
{
    var richtextblock = sender as RichTextBlock;

    // Check if the content of the RichTextBlock was trimmed.
    if (richtextblock.HasOverflowContent)
    {
        // Prepare hyperlink and set visibility to visible.
    }
}

【问题讨论】:

    标签: c# windows-phone-8.1 winrt-xaml


    【解决方案1】:

    与其在 RichTextBlock 加载时检查 HasOverflowContent 的值,不如尝试将超链接的可见性属性绑定到 HasOverflowContent 属性(当然使用 Boolean To Visibility 转换器)?

    【讨论】:

    • 我在用户控件中使用RichTextBlock,无法实现INotifyPropertyChanged 将属性绑定到UI acc。对于这个问题:stackoverflow.com/questions/12466216/….
    • 您不需要 INotifyPropertyChanged。只需给 RichTextBox 命名,然后使用 ElementName 进行绑定:{Binding ElementName=richTextBlock, Path=HasOverflowContent, Converter=...}"
    • 可见性部分现在可以正常工作,这要归功于绑定。但我也在if 块中进行了一些处理(使用RunUnderline 创建超链接的文本格式)。我不想对每个文本块进行这种处理,而只是对那些文本被修剪的文本块进行处理。理想情况下我应该在哪里访问HasOverflowContent,因为Loaded 事件有时会给出不正确的值?
    • 检查例如此链接以获取允许您订阅 DependencyProperty 更改的类:thomaslevesque.com/2013/04/21/…
    猜你喜欢
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多