Почему я не могу вставить текст, скопированный из WPF FlowDocumentScrollViewer или Reader?
В предыдущем вопросе я пытался выяснить, как привязать 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
Я щелкаю правой кнопкой мыши, и появляется меню с параметрами " Выделить все" и " Копировать". Использование " Выбрать все" действительно выделяет весь текст, выбор " Копировать" не вызывает ошибок, но когда я захожу в Блокнот (или Word, или TextPad и т. Д. Или RTB в форме) и пытаюсь вставить текст, ничего не появляется. Как новичок в WPF, я подозреваю, что я делаю что-то не так, но я не знаю, что это такое. Там нет такого понятия, как "безгласный" текст есть?
[Редактировать - 22 июня 2011 г.] По другим причинам я изменил код для использования TextBlock через ItemTemplate внутри ItemsControl, как показано ниже, но я все еще не могу копировать и вставлять.
<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}" />
1 ответ
<Run>
элемент привязывается к каждой строке в коллекции.
Это только должно привязать к текущему элементу, если что-нибудь.
В любом случае, ваш документ на самом деле не содержит никакого текста, если у вас есть только ItemsControl. Зачем? Потому что любые элементы UIE внутри документа автоматически оборачиваются в BlockUIContainer
или же InlineUIContainer
и больше не считаются текстовыми.
Как правило, содержимое копируется в виде XAML, RTF, UnicodeText & Text (я мог бы наблюдать их, но могут быть и другие форматы), вы можете попробовать разместить некоторые Runs
в вашем документе, их текст должен быть скопирован должным образом и Clipboard.GetText()
должен вернуть их содержимое.