为什么我不能粘贴从WPF FlowDocumentScrollViewer或Reader复制的文本?

为什么我不能粘贴从WPF FlowDocumentScrollViewer或Reader复制的文本?,wpf,copy-paste,flowdocument,flowdocumentreader,flowdocumentscrollviewer,Wpf,Copy Paste,Flowdocument,Flowdocumentreader,Flowdocumentscrollviewer,在一个示例中,我试图找出如何将ObservableCollection绑定到控件,这样我既可以看到所有字符串,也可以选择所有字符串,然后从内容控件复制它们。通过使用下面的XAML,这个问题的答案最终让我获得了想要的外观和行为。我尝试了FlowDocumentReader和FlowDocumentScrollViewer,它们的行为是一样的 <Grid> <FlowDocumentScrollViewer> <FlowDocument >

在一个示例中,我试图找出如何将ObservableCollection绑定到控件,这样我既可以看到所有字符串,也可以选择所有字符串,然后从内容控件复制它们。通过使用下面的XAML,这个问题的答案最终让我获得了想要的外观和行为。我尝试了FlowDocumentReader和FlowDocumentScrollViewer,它们的行为是一样的

<Grid>
<FlowDocumentScrollViewer>
    <FlowDocument >
        <Paragraph>
            <ItemsControl ItemsSource="{Binding ErrorMessages, Mode=OneWay}" />
            <Run Text="{Binding /, Mode=OneWay}" />
        </Paragraph>
    </FlowDocument>
</FlowDocumentScrollViewer>
</Grid>
ErrorMessages是我的ViewModel属性,它返回一个ObservableCollection。它正确地绑定到ItemsSource,元素绑定到集合中的每个字符串。看起来不错,可以持续很长时间。这是如此接近,我标记了我的最后一个问题的答案,但我仍然有一个问题

我右键单击,一个菜单显示为“全选”和“复制”选项。使用“全选”确实会突出显示所有文本,选择“复制”不会出现任何错误,但当我转到记事本或Word或TextPad等,或在表单上使用RTB并尝试粘贴文本时,不会显示任何内容。作为WPF的新手,我怀疑我做错了什么,但我不知道是什么。不存在无外观文本这类东西,是吗

[编辑-2011年6月22日] 出于其他原因,我已将代码更改为通过ItemsControl内的ItemTemplate使用TextBlock,如下所示,但仍然无法复制和粘贴

<DataTemplate x:Key="StringCollection">
   <TextBlock TextWrapping="Wrap" Text="{Binding}" TextAlignment="Left"/>
</DataTemplate>
<!--... now down in the ItemsControl-->
<ItemsControl ItemsSource="{Binding ReceivedData, Mode=OneWay}"
      ItemTemplate="{StaticResource StringCollection}" />
元素绑定到集合中的每个字符串

它只应该绑定到当前元素(如果有的话)

无论如何,如果您只有ItemsControl,那么您的文档实际上根本不包含任何文本。为什么?因为文档中的任何UIElements都自动包装在or中,不再被视为文本


一般来说,内容是以XAML、RTF、UnicodeText和Text形式复制的,我可以观察到这些格式,但可能还有其他格式,您可以尝试在文档中放置一些运行,他们的文本应该被正确复制,Clipboard.GetText应该返回他们的内容。

你可以检查Clipboard,在复制之后.Net中有一个类,检查它是否包含文本以及复制了哪些其他数据类型。确定-当我捕获GetFormats时,它显示Xaml、ApplicationTrust、text、UnicodeText、System.String、,富文本格式。当我选中GetDataPresentDataFormats.Text并通过时,我在变量clip_Text中显示了get Text:后跟实际剪贴板文本,后跟clip_Text.Length get Text:4,其中get Text:和下一行的4之间没有任何内容。那是什么意思?4个不可显示的字符,其中一个是新行?选择和复制的实际数据是在InstrumentViewModel中手动添加的三个字符串Fake Error 1 Fake Error 2。我不明白,你说你的文档实际上根本不包含任何文本。它看起来有文本。我可以看到它,我可以选择它。如果您没有注意到在第二次迭代中,我使用了一个TextBlock,但其行为是相同的。不管怎样,我不知道你建议我做什么。我本来有一个电话号码,但没用。增加跑步次数有什么帮助?我有一个潜在的不断变化的消息数量,我想显示他们的工作方式如图所示,但我也想将他们复制到剪贴板。我该换什么?不知怎的,你的邮件在我的收件箱里丢失了。无论如何,TextBlock也不是文本,它们也是包装在容器中的UIElement,不被视为文本。我建议您对此采取完全不同的方法,如我在中建议的连接字符串,然后您可以使用一次运行来显示该文本。此外,即使ItemsControl的项是不可能的,您仍然可以使用ItemsControl本身,它将被包装在一个容器中,使得这些工作毫无意义。好的-谢谢。我相信我现在明白了,让我重新措辞,看看你是否同意。我应该用单个元素替换元素中的内容。然后我应该编写一个转换器,将我的ObservableCollection转换为一个文本元素,希望使用换行符-以保留当前视图并将结果放入该元素中。然后,我将得到相同的外观,但添加了复制现有内容的功能。对吗?@Tod:听起来不错,对。可能还有其他方法,但这似乎是一种更简单的方法。您还可以挂接到copy命令并手动将消息复制到剪贴板。