Как получить TextBlock для переноса или прокрутки внутри FlowDocumentScrollViewer - PullRequest
2 голосов
/ 19 июня 2011

У меня есть следующий XAML в сетке из 4 строк на 2 столбца. Grid.ColumnDefinitions имеют ширину ColumnDefinition равную *.

    <FlowDocumentScrollViewer Style="{StaticResource myFlowDoc}"
                              Grid.Row="4"
                              Grid.Column="1"  >
        <FlowDocument >
            <Paragraph  LineHeight="12" >
                <ItemsControl ItemsSource="{Binding ReceivedData, Mode=OneWay}" />
                <TextBlock TextWrapping="Wrap" Text="{Binding /, Mode=OneWay}" />
            </Paragraph>
        </FlowDocument>
    </FlowDocumentScrollViewer>

Данные поступают из коллекции ObservaleCollection , выглядят хорошо и правильно прокручиваются по вертикали. Однако, когда один элемент не помещается горизонтально в TextBlock, текстовый блок не будет переноситься, и FlowDocumentScrollViewer не будет отображать полосы прокрутки. Единственный способ увидеть текст - развернуть окно по горизонтали. Кто-нибудь знает, что я делаю неправильно, и почему настройка TextWrapping не соблюдается?

В случае, если это имеет значение, вот стиль myFlowDoc

        <Style x:Key="myFlowDoc">
        <Setter Property="Control.Padding"
                Value="0" />
        <Setter Property="FlowDocumentScrollViewer.IsToolBarVisible"
                Value="True" />
        <Setter Property="Control.MinHeight"
                Value="150" />
        <Setter Property="Control.BorderBrush"
                Value="SteelBlue" />
        <Setter Property="Control.BorderThickness"
                Value="2" />
        <Setter Property="Control.VerticalAlignment"
                Value="Stretch" />
    </Style>

[РЕДАКТИРОВАТЬ 1] Вот полный экран с сообщением об ошибке, которое следует перенести. Под этим изображением у меня есть только область детализации сообщения с более широким окном, чтобы вы могли видеть все сообщение. Я также поместил весь xaml для пользовательского элемента управления на https://gist.github.com/1036178#

[РЕДАКТИРОВАТЬ 2.1] Предложение @ Навида привело меня к ответу косвенно. Удаление «/» и упаковка объектов в шаблон данных, похоже, сделали свое дело. Вот новый XAML

<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}" />

Screenshot of window with text that doesn't fit but doesn't wrap Once the window is wider you can see the whole message

1 Ответ

2 голосов
/ 20 июня 2011

используйте это

<ItemsControl ItemsSource="{Binding ReceivedData, Mode=OneWay}">     
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <TextBlock TextWrapping="Wrap" Text="{Binding /, Mode=OneWay}" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
...