6

上一个问题中,我试图找出如何将 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}" />
4

1 回答 1

3

<Run>元素绑定到集合中的每个字符串。

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

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

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

于 2011-06-26T13:35:30.240 回答