gpt4 book ai didi

c# - 在 MeasureOverride(WPF 面板)中,当我没有固有的所需大小时,如何处理 availableSize 中的无穷大值?

转载 作者:太空狗 更新时间:2023-10-29 21:46:09 26 4
gpt4 key购买 nike

我从处理 WPF 中的 Panel 子类化和实现他们自己的布局工作以及为传递给 availableSize arg 中的 MeasureOverride 的维度获取 Infinity 或 PositiveInfinity 的人那里发现了一些其他问题。通常的回答是,“这意味着您可以占用任意多的空间:忽略它,将您所有 child 所需的尺寸加起来并返回。”

在我的例子中,我正在制作一个动态调整大小以填充可用空间的控件,因此没有所需大小的内在概念。它只想使用整个可用大小。

当我构建 ControlTemplate 时,它​​最终嵌套在 StackPanel 中,并且它开始为可用高度获取 Infinity,即使控件没有滚动条。如果我只是将它限制在某个固定的数字,它就会夹在 window 上。我尝试返回 ActualHeight,但这没有用,因为它是循环的:在我完成完整布局之前没有 ActualHeight。所以它总是 0.0。

一开始不知道是StackPanel下传Infinity,翻了一会儿引用源也没用,最后用VisualTreeHelper跑遍parents,看他们的ActualHeight和StackPanel 是最深的一个,高度不为零。我将其更改为 DockPanel,因为我只需要其中的两个控件,因此它与 StackPanel 一样好用。请注意,DockPanel 不会为可用高度传递 Infinity。

但这只是一种解决方法;我想更深入地了解布局背后的理念,以及为什么没有滚动条的标准容器之一会告诉我我可以拥有任意多的空间。对此的“正确”回应是什么?

最佳答案

这个:

I'm making a control that dynamically resizes to fill available space,

是一个糟糕的组合:

it ended up nested within a StackPanel

“填充空间”的控件不应位于堆栈面板内。你认为它应该是多大?

当然对于 ScrollPanel 也是如此。

关于c# - 在 MeasureOverride(WPF 面板)中,当我没有固有的所需大小时,如何处理 availableSize 中的无穷大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10641308/

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