在previous question中,我试图找出如何将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&lt; string&gt; 。它与 ItemsSource 正确绑定,&lt; Run&gt; 元素绑定到集合中的每个字符串。看起来不错,持续很长时间。这是如此接近我标记我的最后一个问题,但我仍有一个问题。
我右键单击,菜单显示全选和复制选项。使用全选,确实突出显示所有文本,选择复制不发出错误,但是当我转到NotePad(或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}" />
答案 0 :(得分:3)
<Run>
元素绑定到集合中的每个字符串。
它只应绑定到当前元素。
无论如何,如果您拥有的是ItemsControl,那么您的文档实际上根本不包含任何文本。为什么?因为文档中的任何UIElements都会自动包含在BlockUIContainer
或InlineUIContainer
中,并且不再被视为文本。
通常,内容被复制为XAML,RTF,UnicodeText&amp;文本(我可以观察到这些,但可能有其他格式),您可以尝试在文档中放置一些Runs
,正确复制文本,Clipboard.GetText()
应该返回其内容。