6

previous question我试图找出如何将一个ObservableCollection绑定到一个控件,这样我就可以看到所有的字符串并选择所有的字符串并从内容控件中复制它们。这个问题的答案最终让我看到了(并且看起来是行为),我想通过使用下面的XAML。 (我想既是FlowDocumentReader和FlowDocumentScrollViewer - 它们具有相同的行为。)为什么我无法粘贴从WPF FlowDocumentScrollViewer或Reader复制的文本?

<Grid> 
<FlowDocumentScrollViewer> 
    <FlowDocument > 
     <Paragraph> 
      <ItemsControl ItemsSource="{Binding ErrorMessages, Mode=OneWay}" /> 
      <Run Text="{Binding /, Mode=OneWay}" /> 
     </Paragraph> 
    </FlowDocument> 
</FlowDocumentScrollViewer> 
</Grid> 

ErrorMessages是返回的ObservableCollection <字符串>我的ViewModel财产。它正确地结合到的ItemsSource<运行>元素结合到集合中的每个字符串。看起来不错,持续很长时间。这是如此接近我标记我的最后一个问题,但我仍然有一个问题。

我点击右键,菜单显示了与全选复制选项。使用选择全部,确实突出显示所有文字,选择复制问题没有错误,但是当我去记事本(或字,或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}" /> 
+0

您可以检查剪贴板(有.NET中['Clipboard'(http://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard.aspx)类)之后* Copy *并检查它是否包含文本以及其他数据类型是否被复制。 – 2011-06-14 21:59:45

+0

好的 - 当我捕获GetFormats()时,它显示 Xaml,ApplicationTrust,Text,UnicodeText,System.String,Rich Text Format。 当我检查GetDataPresent(DataFormats.Text)并且它通过时,我显示了“Got Text:”,后面跟着变量clip_text中的实际剪贴板文本,后面跟着clip_text.Length() Got text: 4得到的文本:和4是在下一行。 这是什么意思? 4个不可显示的字符,其中一个是新行?选择和复制的实际数据是三个字符串 假错误1 假错误2 手动添加到InstrumentViewModel中。 – Tod 2011-06-14 22:35:49

回答

3

<Run>元件结合到集合中的每个字符串。

只应绑定到任何东西,如果当前元素。

无论如何,你的文件是否确实不包含任何文字的,如果你已经是ItemsControl的。为什么?由于文档中的任何UIElements都自动包装在BlockUIContainerInlineUIContainer中,因此不再被视为文本。

一般内容复制为XAML,RTF,UnicodeText &文本(我所观察到的,但也有可能是其他格式),你可以尝试把一些Runs你的文档中,其文本应适当复制Clipboard.GetText()应该返回其内容。

+0

我不明白,当你说“你的文件确实没有包含任何文字”。它看起来像有文字。我可以看到它,我可以选择它。如果您在第二次迭代中没有注意到我使用了TextBlock,但行为是相同的。无论我不确定你在暗示我做什么。我本来有一个,并没有奏效。如何让更多的跑步帮助?我有可能变化的消息数量,我想显示它们(如图所示),但我也想将它们复制到剪贴板。我应该改变什么? – Tod 2011-06-27 05:54:41

+1

不知怎么,你的信息在我的收件箱中丢失了。无论如何,TextBlocks也不是文本,它们也是UIElements,它们被包装在容器中,不像文本那样被处理。我建议你采取一种完全不同的方法来解决这个问题,比如我在[我的回答你的早期问题](http://stackoverflow.com/posts/6339441/edit)中建议的连接字符串,然后你可以使用一个'运行'显示该文本。 – 2011-06-30 12:38:00

+0

此外,即使ItemsControl的项目是[流程内容](http://msdn.microsoft.com/en-us/library/ms753113.aspx)(这是不可能的),您仍然会拥有ItemsControl本身这将被包装在一个容器中,使这些努力毫无意义。 – 2011-06-30 12:45:09