WPF FlowDocument 不会填充 Viewbox 容器



我有一个 WPF 用户控件,我想使用 FlowDocument 在代码中加载动态内容:文本块、项目符号列表等。框大小在设计器中看起来不错,但在运行时,FlowDocument 坚持裁剪结果并仅显示部分宽度。

我的假设是,Viewbox将填充网格单元格和内部FlowDocument以填充所有可用空间。

我尝试在代码中设置FlowDocument的PageWidth/PageHeigth,但没有结果。

任何帮助表示赞赏。

<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>

我终于让它工作了!!

问题在于 Viewbox 缩放基于子对象的设计时间大小。即使内部子对象的实际大小更大,它们仍将向 ActualWidth 和 ActualHeight 属性报告其设计时间大小。这有点令人困惑。

解决方法是在运行时创建整个内容,包括 FlowDocumentScrollViewer 及其 FlowDocument。然后,它们将基于当前的可用空间,并按预期填充内容。

就我而言,目的是制作一个简单的降价解析器,该解析器将生成动态布局。这现已实现并正常工作:)

最新更新