1

要素を含むいくつかのRichTextBlockオブジェクトを扱っていInlineUIContainerます。に含まれるテキストを含むすべてのテキストを選択してコピーできるようにしたいと考えていますInlineUIContainer

現在、ブロック内のすべてのテキストを選択すると、InlineUIContainerオブジェクトに含まれるテキストがスキップされます。

これが私が作成しているものの例です:

<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 からすべてのテキストを選択してメモ帳にコピー アンド ペーストすると、スーパー スクリプト テキストまたはリンク テキストが表示されません。

すべてのテキストを選択する方法はありますか?

4

1 に答える 1

2

これは、HyperlinkBut​​ton がドキュメント API の一部ではなく、実際には InlineUIContainer にラップされた UIElement であるためです。これを処理するには 2 つの方法があります。

  1. Windows 8.1 に切り替えて、TextElement とコピーを継承する Hyperlink は正常に機能します。
  2. Windows 8 でこれをサポートする必要がある場合、これは難しい方法です。RichTextBlock の既定のコンテキスト メニュー項目を削除し、独自のコピー コマンドに置き換えます。RichtextBlock.SelectionStart と RichTextBlock.SelectionEnd の 2 つの TextPointers を取得する必要があります。

WPF を使用すると、この範囲内で TextRange を取得できますが、winRT はそれを公開しないため、コードでそれを行う必要があります... RichTextBlock 内のすべてのブロックを取得し、それぞれを反復処理して ContentStart と ContentEnd であるかどうかを確認しますRTB.SelectionStart と RTB.SelectionEnd 内にある場合は、それらをリストに追加します。

これで、このリストと HyperlinkBut​​ton をホストする InlineUIContainer から、すべてのランと太字/斜体を簡単に抽出できるはずです。

2 段落などの余白を確保するのが難しいため、これは実際には良い方法ではありません。

于 2013-08-21T15:45:40.910 に答える