首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用InlineUIContainers复制Xaml RichTextBlock文本

使用InlineUIContainers复制Xaml RichTextBlock文本
EN

Stack Overflow用户
提问于 2013-04-07 05:24:08
回答 1查看 977关注 0票数 1

我正在使用一些包含InlineUIContainer元素的RichTextBlock对象。我希望能够选择和复制所有的文本,包括在InlineUIContainer中包含的文本。

当前,当我选择块中的所有文本时,将跳过InlineUIContainer对象中包含的文本。

下面是我正在创建的一个示例:

代码语言:javascript
复制
<RichTextBlock IsTextSelectionEnabled="True">
    <Paragraph FontSize="20">
        <Bold>This text is selectable</Bold>
        <InlineUIContainer FontFamily="Global User Interface">
            <StackPanel Orientation="Horizontal">
                <TextBlock FontSize="11" VerticalAlignment="Top" Margin="0,0,-1,0">Super Script Text</TextBlock>
                <HyperlinkButton ClickMode="Release" Style="{StaticResource NoMarginHyperlinkButtonStyle}">
                    Link
                </HyperlinkButton>
            </StackPanel>
        </InlineUIContainer>
        This text is also selectable
    </Paragraph>
</RichTextBlock>

如果我选择这段Xaml中的所有文本并将其复制/粘贴到NotePad中,我就得不到超级脚本文本或链接文本。

有没有办法把所有的文本都选中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-21 23:45:41

这是因为HyperlinkButton不是document API的一部分,而实际上是包装在InlineUIContainer中的UIElement。有两种方法可以处理这个问题。

  1. 切换到Windows8.1和从TextElement继承并复制的超链接将正常工作。
  2. 如果您必须在Windows8中支持此功能,则这是一种困难的方法。删除RichTextBlock的默认上下文菜单项,并替换为您自己的复制命令。哪一个应该得到2个TextPointers,即RichtextBlock.SelectionStart和RichTextBlock.SelectionEnd

现在使用WPF,我们可以在这个范围内获得一个TextRange,但是winRT没有公开它,所以你需要在你的代码中做到这一点……获取RichTextBlock中的所有块,遍历每个块以检查它的ContentStart和ContentEnd是否在RTB.SelectionStart和RTB.SelectionEnd中,如果是,则将它们添加到列表中。

现在应该很容易从这个列表和任何托管HyperlinkButtons的InlineUIContainers中提取所有的运行和粗体/斜体。

2这真的不是一个好的方法,因为它将很难考虑到段落等的页边距等。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15856178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档