WPF FlowDocument не заполняет контейнер Viewbox

У меня есть пользовательский элемент управления WPF, который я хочу загрузить с динамическим содержимым в коде с помощью FlowDocument: текстовые блоки, маркированные списки и т. Д. Содержимое загружается должным образом. И размеры блока выглядят нормально в дизайнере, но во время выполнения FlowDocument настаивает на обрезке результата и отображении только части ширины.

Я предполагал, что Viewbox заполнит ячейку сетки и внутренний FlowDocument, чтобы заполнить все доступное пространство.

Я попытался установить PageWidth / PageHeigth FlowDocument в коде, но безрезультатно.

Любая помощь приветствуется.

<Grid x:Name="grdDisplay">
    <Grid.RowDefinitions>
        <RowDefinition Height="22*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

    <Viewbox x:Name="viewboxContent" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" HorizontalAlignment="Left" VerticalAlignment="Top" StretchDirection="DownOnly">
        <FlowDocumentScrollViewer VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Hidden">
            <FlowDocument x:Name="flowDocument">        
            </FlowDocument>
        </FlowDocumentScrollViewer>
    </Viewbox>

    <Viewbox Grid.Row="1" Grid.Column="0" VerticalAlignment="Bottom" HorizontalAlignment="Left" StretchDirection="DownOnly">
        <TextBlock x:Name="txtBottom" />
    </Viewbox>
</Grid>


person Jakob Lithner    schedule 08.02.2016    source источник
comment
Удалите FlowDocumentScrollViewer из Viewbox, не думайте, что вам нужен Viewbox.   -  person Kelly Barnard    schedule 09.02.2016
comment
Я бы избавился от окна просмотра.   -  person JWP    schedule 09.02.2016
comment
Зачем избавляться от окна просмотра ?? Я буду динамически добавлять контент разного размера, и я хочу, чтобы он всегда был виден целиком. Как бы этого добиться без окна просмотра?   -  person Jakob Lithner    schedule 09.02.2016


Ответы (1)


Наконец-то я заработал !!

Проблема заключается в том, что масштабирование окна просмотра основано на размере времени разработки дочернего объекта. Даже если фактический размер внутренних дочерних объектов больше, они все равно будут сообщать свой размер времени разработки также в свойствах ActualWidth и ActualHeight. Это сбивает с толку.

Обходной путь заключается в создании всего содержимого, включая FlowDocumentScrollViewer и его FlowDocument во время выполнения. Затем они будут основаны на текущем доступном пространстве и заполнят содержимое, как ожидалось.

В моем случае целью было создание простого анализатора уценки, который будет генерировать динамический макет. Теперь это реализовано и работает нормально :)

person Jakob Lithner    schedule 13.02.2016