前の質問で、ObservableCollection をコントロールにバインドして、すべての文字列を表示し、すべての文字列を選択してコンテンツ コントロールからコピーできるようにする方法を見つけようとしていました。その質問への回答により、次の XAML を使用して、最終的に私が望んでいた外観 (および一見動作) が得られました。(私は FlowDocumentReader と FlowDocumentScrollViewer の両方を試しました - それらは同じように動作します。)
<Grid>
<FlowDocumentScrollViewer>
<FlowDocument >
<Paragraph>
<ItemsControl ItemsSource="{Binding ErrorMessages, Mode=OneWay}" />
<Run Text="{Binding /, Mode=OneWay}" />
</Paragraph>
</FlowDocument>
</FlowDocumentScrollViewer>
</Grid>
ErrorMessagesは、ObservableCollection<string>を返す ViewModel プロパティです。これはItemsSourceに適切にバインドされ、<Run>要素はコレクション内の各文字列にバインドされます。見栄えがよく、長持ちします。これは非常に近かったので、最後の質問に回答済みのマークを付けましたが、まだ問題が 1 つあります。
右クリックすると、[すべて選択]と[コピー]オプションのメニューが表示されます。Select Allを使用すると、実際にすべてのテキストが強調表示され、Copyを選択してもエラーは発生しませんが、メモ帳 (または 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}" />