我也花了很多时间来弄清楚整个故事。在网上找到这个问题的纯 XAML(零代码)答案非常困难,所以这是我的。
当我们在 Visual Studio WPF 设计器中设计 Window 时,标准(默认情况下)方法是在 上定义Width
和Height
属性Window
,就像在 XAML 中这样:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="75" Width="190">
<Grid>
<Button Content="Right" HorizontalAlignment="Right" Margin="0,0,10,10" VerticalAlignment="Bottom" Width="75" />
<Button Content="Left" HorizontalAlignment="Left" Margin="10,0,0,10" VerticalAlignment="Bottom" Width="75"/>
</Grid>
</Window>
设计器预览如下所示:
一切看起来都很酷,但是当我们运行应用程序时,根据当前的 Windows 版本、主题和所有显示设置 jazz,运行时窗口有 99% 的可能性不会看起来像设计的窗口。这是它在我的 Windows 8.1 上的样子:
最初的解决方案是,就像在奥伦的回答中使用该SizeTocontent
属性一样。它基本上告诉 WPF 从它的内容定义窗口大小(又名“客户端大小”),而不是窗口本身(又名“客户端大小 + 所有非客户端/chrome/边框完全无法控制的东西”)。
因此,我们可以将 Content 定义为固定大小,如下所示:
<Window x:Class="WpfApplication1.MainWindowSizeToContentCentered"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" SizeToContent="WidthAndHeight">
<Grid Height="40" Width="180">
<Button Content="Right" HorizontalAlignment="Right" Margin="0,0,10,10" VerticalAlignment="Bottom" Width="75" />
<Button Content="Left" HorizontalAlignment="Left" Margin="10,0,0,10" VerticalAlignment="Bottom" Width="75"/>
</Grid>
</Window>
现在,运行时窗口看起来正是我们想要的(请注意,网格的高度和宽度与原始窗口一 - 40/180 vs 75/190 - 的值并不完全相同,这很好,就像在设计模式下一样,你现在可以永远忘记窗口的高度和宽度属性):
调整窗口大小时它的行为如何?像这样,网格居中,如果您想要这种行为,这很好:
但是,如果我们想要问题中的行为(“我可以调整窗口大小,但它的内容不会随之调整大小,因为我指定了固定大小。”),这也是原始行为,而不是指定 Width和高度,我们可以使用MinWidth
和MinHeight
,像这样:
<Window x:Class="WpfApplication1.MainWindowSizeToContentResizable"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" SizeToContent="WidthAndHeight">
<Grid MinHeight="40" MinWidth="180">
<Button Content="Right" HorizontalAlignment="Right" Margin="0,0,10,10" VerticalAlignment="Bottom" Width="75" />
<Button Content="Left" HorizontalAlignment="Left" Margin="10,0,0,10" VerticalAlignment="Bottom" Width="75"/>
</Grid>
</Window>
运行时窗口看起来相同,但调整大小的体验现在与原始默认窗口布局相当:
那应该是默认的 WPF 设计器布局恕我直言。