c# - 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
?谢谢你。
解决方案
我相信您可以使用 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:目前您的内容宽度设置为“*”。所以它无论如何都不受限制,将占据整个空间。你需要以某种方式限制它,以防你希望你的窗口不是全宽打开
推荐阅读
- amazon-dynamodb - Localstack + Jest: DynamoDB throws ResourceNotFoundException on deleteTable for an existing table
- postman - How to change the variables form environment to collection level in postman
- python - 如何使用 colmun 名称旋转 pandas.dataframe
- python - 如何将字符串类型列的因子级别集中到pydatatable中的另一个列中?
- php - 当我使用 codeigniter 发送多封电子邮件时如何隐藏其他电子邮件地址?
- excel - 使用值列工作表识别值文本框
- html - 使子元素位置:粘性
- javascript - Rails 使用 Javascript 重定向到移动应用程序
- c# - 为 id EF Core 3.1 创建了重复的外键和列
- wmi - 为什么我有 WMI 类但没有实例?