gpt4 book ai didi

.net - 强制自定义 WPF 控件正确调整大小

转载 作者:行者123 更新时间:2023-12-03 04:11:24 27 4
gpt4 key购买 nike

我编写了一个 WPF 用户控件,其中一部分涉及向 Canvas 动态添加元素,从而影响所述 Canvas 的高度。 Canvas 嵌套在网格内。当我动态添加元素时, Canvas 的高度会发生变化,但 Canvas 最终会延伸到整个控件的边缘之外,而不是导致控件调整大小并使自身更高。如何强制控件正确调整大小?我感觉我需要调用或覆盖 Measure 或 Arrange,但我对这两种方法都没有运气 - 可能是因为我使用不正确的参数调用它们,或者可能是因为它们不是要调用的正确方法。

最佳答案

您的问题是 Canvas 面板不会调整大小以适应其内容。

您提到了测量和安排。您熟悉 WPF 的两遍布局系统吗?阅读本文了解更多信息:WPF's Layout System .

本文还介绍了不同面板对布局的作用。每种类型的面板都不同。

在 WPF 中,元素首先有机会确定它们的大小。小组可以根据 child 的体型来确定其尺寸,也可以无论 child 的体型如何都要求固定尺寸。 Canvas 就是后者的一个例子。

接下来,元素会被告知它们的大小,并要求它们自己和它们的 child 进行排列。

网格面板类型不仅允许行和列,而且还非常擅长自动调整内容大小。

StackPanel 类型在其定向的维度中根本不会自动调整大小,但会在其他维度中自动调整大小。

Canvas 可以自动调整大小以填充空间,但它绝不允许其子项自动调整大小。它在指定的坐标处绘制其子级,并且不关心它们有多大。

我建议尝试只有一行/列的网格。

或者您可以创建一个具有更好的自动调整大小功能的新 Canvas 类。在测量过程中,您可能需要测量子元素并相应地调整 Canvas 的大小。您可能会发现这样的类(class)对以后很有帮助。

这是一篇关于 Auto Layout 的文章在 WPF 中。

如果您想创建自定义面板,这里有一个子主题:Custom Panel Elements .

编辑:另一件事:您还可以将子元素的宽度/高度绑定(bind)到 Canvas 上的 ActualWidth 和 ActualHeight 属性,以便子元素调整其父元素的大小。如果需要,您可以使用转换器来设置尺寸比例。

关于.net - 强制自定义 WPF 控件正确调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/518674/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com