例如,我在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,但它不是一个不易维护的解决方案。
更新
我经常找到一个解决方案
我为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设置为此最小大小值。它就是诀窍!
答案 0 :(得分:0)
删除按钮'Height
。
<Button Grid.Column="0" Margin="10" />
<Button Grid.Column="1" Margin="10" />
这将导致按钮根据窗口大小调整大小。
答案 1 :(得分:0)
虽然@Dimitry M的解决方案有效,但是有一个更简单的解决方案,没有魔术值。设置SizeToContent="WidthAndHeight"
并将事件侦听器绑定到Window的ContentRendered
事件:
<Window ...
SizeToContent="WidthAndHeight"
ContentRendered="MainWindow_OnContentRendered">
这将强制窗口适应其内容,然后在渲染后,我们通过将其最小尺寸设置为实际尺寸来防止缩小尺寸。
private void MainWindow_OnContentRendered(object sender, EventArgs e)
{
MinWidth = ActualWidth;
MinHeight = ActualHeight;
}