Почему я не могу вставить текст, скопированный из 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>

ошибка сообщения является ли мое свойство ViewModel, которое возвращает ObservableCollection. Он правильно привязывается к ItemsSource и элемент привязывается к каждой строке в коллекции. Выглядит хорошо, длится долго. Это было так близко, что я отметил свой последний вопрос как ответ, но у меня все еще есть одна проблема.

я щелкаю правой кнопкой мыши, и появляется меню с Выделить Все и скопировать параметры. Используя Выделить Все, действительно ли выделите весь текст, выбрав скопировать не выдает ошибок, но когда я иду в блокнот (или 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. Почему? Потому что любые UIElements внутри документа автоматически завернуты в BlockUIContainer или InlineUIContainer и больше не считаются текстом.

В общем содержание скопировано как XAML, RTF, UnicodeText & Text (я мог бы наблюдать их, но могут быть и другие форматы), вы можете попробовать разместить некоторые Runs в документе, их текст должен быть скопирован правильно и Clipboard.GetText() должен вернуть их содержимое.