在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}" />
您可以检查剪贴板(有.NET中['Clipboard'(http://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard.aspx)类)之后* Copy *并检查它是否包含文本以及其他数据类型是否被复制。 – 2011-06-14 21:59:45
好的 - 当我捕获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