我知道Window
(FrameworkElement
实际上)你可以指定 aMinWidth
和MinHeight
。我想知道如何使最小匹配窗口的DesiredSize
?
换句话说,我想说“您可以根据需要调整此窗口的大小,但不能小于显示其内容所需的最小值。”
例如,假设我有一个简单Window
的包含 a DockPanel
,其中三个项目垂直排列。为简单起见,我们只讨论高度。
第一个是 a
Rectangle
,aHeight
为 20,固定在顶部,所以它DesiredSize.Height
是 20。第二个是 a
Label
,它的 aMinHeight
为 20,固定在底部,但如果有多行文本,高度会增加。(目前只有一个单词,所以DesiredSize.Height
也是 20)第三项是一个自定义控件
ImageViewer
,它填充了中间的剩余区域,但它永远不会小于它的内容,加上它的填充。目前图像是 15x15,边距是 2.5,所以它DesiredSize.Height
是 20 (2.5 + 15 + 2.5)
综上所述,DesiredSize.Height
StackPanel 的 60 (20 + 20 + 20),而DesiredSize.Height
60 Window
+ 它自己的 chrome 的高度(假设它也是 20),这似乎给了我一个Window.DesiredSize.Height
80 的。这就是我为窗口的 MinHeight 所追求的。
我已经尝试通过 a将 The Window
's绑定MinHeight
到它(这需要 a来确定返回or相应地),但它没有任何效果。DesiredSize.Height
SizeToDoubleConverter
Dimension
Width
Height
这看起来很有希望...
protected override Size MeasureOverride(Size availableSize) {
var desiredSize = base.MeasureOverride(availableSize);
MinWidth = Math.Ceiling(DesiredSize.Width);
MinHeight = Math.Ceiling(DesiredSize.Height);
return desiredSize;
}
注意:我倾向于Math.Ceiling
在实际中使用,DesiredSize.Height
因为它通常是一小部分,并且在与设备像素对齐时布局会被抛出,把事情搞砸。
以上接近于工作,但是如果您还想将其设置为MaxHeight
等于它(例如,允许水平尺寸,但不允许垂直尺寸),您会遇到问题。
这种事情在 iOS/macOS 中使用 AutoLayout 很容易,但我不确定如何在 WPF 中执行此操作,甚至以编程方式。我只需要继续猜测什么尺寸看起来最好。