【问题标题】:WPF DockPanel MinHeight usageWPF DockPanel MinHeight 用法
【发布时间】:2019-12-17 20:31:41
【问题描述】:

DockPanel如何确定底部的Height? 如果提供了明确的 Height 属性,则将使用该属性。
如果没有提供Height 但有MinHeightMaxHeight 它似乎一直下降到MinHeight,像这样:

<DockPanel>

    <Button Name="btn" 
            DockPanel.Dock="Bottom" 
            MinHeight="80" 
            MaxHeight="160"
            Content="{Binding ElementName=btn, Path=ActualHeight}"
            />

    <Button Content="Center"/>

</DockPanel>

我使用绑定将ActualHeight 显示为按钮内容。

但并非总是如此!当我使用ScrollViewer 作为底部组件时,它似乎使用了MinHeight (20) 和MaxHeight (160) 之间的中间值(33)。

<DockPanel>

    <ScrollViewer Name="sv" 
                  DockPanel.Dock="Bottom" 
                  MinHeight="20" 
                  MaxHeight="160">
        <TextBlock Text="{Binding ElementName=sv, Path=ActualHeight}"/>
    </ScrollViewer>

    <Button Content="Center"/>

</DockPanel>

这里令人惊讶的事实是,它似乎使用了比只查看组件的Height/MinHeight 更复杂的大小调整算法。
也许它也在查看组件类型,所以对于ScrollViewer,它也考虑了内容范围。 DockPanel 文档并没有深入解释默认算法。
在哪里可以找到完整的说明?
这些 WPF 标准控件的源代码是否可用?

【问题讨论】:

    标签: wpf dockpanel


    【解决方案1】:

    没有那么神秘。骗你的就是骗了我很久。似乎声明性语言不会依赖于顺序......哦,但它是!

    如果您在第一个示例中颠倒控件的顺序,您会发现按钮现在将处于最大高度而不是最小高度。

    如果您在第二个示例中颠倒控件的顺序,您会发现滚动查看器现在将处于视图中心的最大高度,并且按钮将停靠在左侧。

    第二个示例中的滚动视图是高度 33 的原因?嗯,这是组件元素的最小尺寸的结果。如果您查看 Live Visual Tree,您会看到滚动条有 3 个垂直元素:2 个中继器按钮和一个边框中的轨道。每一个的最小尺寸是 16、16、0、1,加起来是 33。

    源代码对你帮助不大。一旦你弄清楚布局机制,它们的行为将不再复杂。相反,您会发现它们是粗鲁和幼稚的……最好预测结果。

    要真正深入研究标准控件,您需要可以在https://docs.microsoft.com/en-us/dotnet/framework/wpf/controls/control-styles-and-templates 找到的样式和模板

    【讨论】:

    • "如果你颠倒顺序"=>错误:这是 LastChildFill 默认为 true 的效果。设置此 DockPanel 道具。为假,甚至颠倒顺序,高度将保持 33。为什么高度是 33=>你说的很有趣,但这意味着有一个隐藏的 MinHeight 优先于明确的 MinHeight 集被考虑在内。这个解释有些奇怪:当达到 MinHeight 时,如果你降低窗口高度,它应该开始剪裁它,但它仍然将高度缩小到 20! 33 似乎更像是首选高度!
    • 没有“隐藏”的最小高度。按钮的最小渲染高度是箭头图标的结果。我对订单依赖性也完全正确。试试一个有 10 个控件的窗口,告诉我顺序无关紧要!同样,布局不是火箭科学。您最初给它的范围在 20 到 160 之间,而控件取了 33,因为这是渲染滚动按钮所用的。当你强迫它少于 33 时,当然,它开始剪辑了。
    猜你喜欢
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 2015-07-04
    • 2011-05-20
    • 2016-04-17
    • 2013-03-08
    相关资源
    最近更新 更多