例如,我的 MainWindow.xaml 中有这个简单的标记:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Margin="10" Width="300" />
<Button Grid.Column="1" Margin="10" Width="300" />
</Grid>
当我启动应用程序并调整主窗口的大小时,我可以在裁剪按钮时使其小于按钮的大小。
我尝试设置 MinWidth 属性 - 没有用。唯一的方法是设置整个窗口的 MinWidth ,但这不是非常可维护的解决方案。
更新
Evetually 我找到了解决方案。
我为 MainWindow SizeChanged 添加了事件处理程序。使用以下代码:
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
FrameworkElement topmost = (Content as FrameworkElement);
topmost.Measure(new Size(ActualWidth, ActualHeight));
MinHeight = topmost.DesiredSize.Height + 40;
MinWidth = topmost.DesiredSize.Width;
}
我发现任何 FrameWorkelement 的 Measure 方法都会强制它使用它可以占用的给定空间量来计算它想要占用的空间,并考虑它的所有子元素并将其存储到 DesiredSize 属性中。因此,我使用窗口的当前大小调用窗口最顶部元素的 Measure 方法,并在 DesiredSize 中获得窗口中所有内容的最小大小。然后我将窗口的 MinHeight 和 MinWidth 设置为这个最小尺寸值。它成功了!