【问题标题】:WPF FlowDocument will not fill Viewbox containerWPF FlowDocument 不会填充 Viewbox 容器
【发布时间】:2016-02-14 03:15:03
【问题描述】:

我有一个 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 中移除 FlowDocumentScrollViewer,不要认为你需要 Viewbox。
  • 我会摆脱视图框。
  • 为什么要去掉viewbox??我将动态添加不同大小的内容,并且我想确保它始终被完整地看到。如果没有 viewbox,这将如何实现?

标签: c# wpf flowdocument viewbox


【解决方案1】:

终于搞定了!!

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

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

在我的例子中,目的是制作一个简单的 Markdown 解析器来生成动态布局。现在已经实现并且工作正常:)

【讨论】:

    猜你喜欢
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 2021-08-24
    • 2014-01-11
    • 2015-04-05
    • 1970-01-01
    相关资源
    最近更新 更多