首页 > 解决方案 > WPF Window 占用最大屏幕可用空间

问题描述

考虑一个没有指定宽度/高度的 WPF 窗口SizeToContent="WidthAndHeight",其中内容是动态设置的,例如在某处的代码中:

win.Content = new UserControlWithDataGrid();

UserControlWithDataGrid 是这样的:

<DataGrid Height="600">
    <DataGrid.Columns>
        <DataGridTextColumn x:Name="Name" Width="*" Header="Name"/>
    </DataGrid.Columns>
</DataGrid>

生成的窗口将增长到可用的屏幕空间,因为唯一的“约束”元素Width是 DataGridTextColumn。但由于它Width被设置为“占用整个可用空间”,它会不断增长,直到找到一个限制。

话虽如此,我不想MaxWidth在 Window 上指定 a,因为我根本不想限制它。我不想Width在 Window 上指定 a ,因为我希望它适应它的内容,因为在这种情况下有UserControlWithDataGrid但我可以动态地将它更改为UserControlWithSomethingElse.

那么,有没有办法以所需的最小值而不是允许的最大值打开窗口,最好不必从 导出Panel?谢谢你。

标签: c#wpfxaml

解决方案


我相信您可以使用 SizeToContent 属性来实现您想要的结果。有关该属性的更多信息: https ://docs.microsoft.com/en-us/dotnet/api/system.windows.window.sizetocontent?view=net-5.0

此外,您还可以选择限制用户将窗口大小调整为低于内容需要的值:

public MainWindow() {
  InitializeComponent();
  this.SizeToContent = System.Windows.SizeToContent.WidthAndHeight;
  this.Loaded += MainWindow_Loaded;
}

void MainWindow_Loaded(object sender, RoutedEventArgs e) {
  this.MinWidth = this.Width;
  this.MinHeight = this.Height;
}

upd:目前您的内容宽度设置为“*”。所以它无论如何都不受限制,将占据整个空间。你需要以某种方式限制它,以防你希望你的窗口不是全宽打开


推荐阅读