2013-04-06 39 views
1

我正在使用一些包含InlineUIContainer元素的RichTextBlock對象。我希望能夠選擇並複製所有文本,包括InlineUIContainer中包含的文本。使用InlineUIContainers複製Xaml RichTextBlock文本

當前,當我選擇塊中的所有文本時,將跳過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選擇所有文本的複製/粘貼到記事本中,我沒有得到超級腳本文字或鏈接文字。

有沒有什麼辦法可以讓所有的文本被選中?

+0

你檢查[這]利潤率等(http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/a74e765d-f8ed-45cc-a0e8-77800f59a001 /),我知道它與WPF有關。 – Xyroid 2013-04-07 05:40:03

+0

感謝您的鏈接,我會檢查出來,讓你知道如果這個作品 – 2013-04-08 14:06:57

回答

2

這是因爲HyperlinkBut​​ton不是文檔API的一部分,實際上是包裝在InlineUIContainer中的UIElement。有兩種方法可以處理這個問題。

  1. 切換到Windows 8.1和超鏈接從TextElement繼承和複製將工作得很好。
  2. 如果您必須在Windows 8中支持此操作,則這是困難的方法。 刪除RichTextBlock的默認上下文菜單項並用您自己的Copy命令進行替換。這應該得到2個TextPointers即RichtextBlock.SelectionStart和RichTextBlock.SelectionEnd

現在使用WPF,我們可以在這個範圍內得到一個TextRange但WinRT的不公開,所以你需要做的是在你的代碼.. 獲取RichTextBlock中的所有塊,然後遍歷每個塊以檢查它是否ContentStart和ContentEnd在RTB.SelectionStart和RTB.SelectionEnd中,如果是,則將它們添加到列表中。

現在應該很容易從這個列表和任何託管HyperlinkBut​​ton的InlineUIContainers中提取所有運行和粗體/斜體。

2這是不是一個真正的好辦法去,因爲這將是很難允許在段等

+0

8.1它是!謝謝 – 2013-08-26 03:55:31