在上一个问题中,我试图找出如何将 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<string>。它正确绑定到ItemsSource并且<Run>元素绑定到集合中的每个字符串。看起来不错,可以用很久。这是如此接近我将我的最后一个问题标记为已回答,但我仍然有一个问题。
我右键单击并显示一个带有“全选”和“复制”选项的菜单。使用Select All确实会突出显示所有文本,选择Copy不会出现任何错误,但是当我转到 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}" />