我知道这是事后几年的事了,但我最近遇到了这个问题,因为我正在处理我遇到的类似问题。这就是我解决它的方法。该解决方案是针对我的问题的,但可以进行更改以获得各种所需的调整大小行为。
首先设置窗口,使其最初调整大小以适应其内容。
<Window ...
SizeToContent="WidthAndHeight" >
接下来我设置每个嵌入式控件,以便它报告所需的宽度和高度。大多数内置控件都会为您执行此操作。您可以通过覆盖 MeasureOverride 来为自定义控件执行此操作,或者您可以为控件设置宽度和高度。将此设置为您希望控件获得的最小尺寸。
<MyControl Name="_MyControlName" Width="640" Height="480" />
不必担心这些“硬”编码值会影响控件的行为。我们接下来处理这个问题。现在,当窗口显示时,它会自动调整以适应您的控件。
接下来订阅窗口加载事件。
<Window ...
SizeToContent="WidthAndHeight" Loaded="Window_Loaded" >
在窗口加载事件中,您可以调整窗口的大小行为和其中的控件。您可以制作它,以便您的控件可以调整大小。您可以将窗口的最小尺寸设置为您刚刚布置的尺寸。这里的好处是你只允许布局系统为你找到一个好的布局。你想利用它的工作。
private void Window_Loaded(object sender, RoutedEventArgs e)
{
// We know longer need to size to the contents.
ClearValue(SizeToContentProperty);
// We want our control to shrink/expand with the window.
_MyControlName.ClearValue(WidthProperty);
_MyControlName.ClearValue(HeightProperty);
// Don't want our window to be able to get any smaller than this.
SetValue(MinWidthProperty, this.Width);
SetValue(MinHeightProperty, this.Height);
}
您在 Window_Loaded 方法中放置的内容将取决于您尝试完成的行为。
希望这可以帮助其他人节省时间。