窗口高度="自动"未按预期工作

239

我想要做的是展示一个没有明确高度/宽度的窗口(两个值都被省略或设置为Auto)。 我猜测这个窗口会通过自动计算所有包含的用户控件大小来确定其大小,但是实际上这并不起作用!

相反,我得到了一个大窗口,ActualwidthActualheight 值都设置为512(?!?)

窗口声明:

<Window x:Class="Window3"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="Window3" 
  Height="Auto">
<StackPanel>
    <Label>Window</Label>
</StackPanel>
</Window>

通过以下方式将此窗口显示为对话框:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button2.Click
    Dim dlg As New Window3
    dlg.ShowDialog()
End Sub

有没有解决方案? 我不想显式设置窗口大小,因为表单中的许多控件将根据构造函数参数折叠,而尝试找到表单的实际大小会很棘手(而且难看)。


8
您可能还希望将窗口居中显示,可以将.WindowStartupLocation设置为"CenterScreen" - Anders Lindén
5个回答

454

将窗口的属性设置为 SizeToContent="WidthAndHeight"。这应该有所帮助。


92
适用于懒人的复制粘贴代码 SizeToContent="WidthAndHeight" ;) - Tono Nam
6
请注意使用SizeToContent="WidthAndHeight"。如果窗口内容的大小增加超过了屏幕大小,窗口可能会溢出屏幕。 - Kylo Ren
2
@KyloRen 所以应该设置MaxWidth或MaxHeight来避免这个问题。 - Carlos Liu
@CarlosLiu 好久不见了,我已经生疏了,记不起来了,但是从逻辑上看是正确的。可以在演示中尝试一下 :) - Kylo Ren
这很好,但我仍然很好奇为什么 Height="Auto"Width="Auto" 没有达到相同的效果?我猜测是因为这些设置不考虑窗口内容。 - Mike Lowery

9

旧问题但更新的答案:

如@Muad'Dib在他的回答中建议的:

您应该设置SizeToContent="WidthAndHeight"

如果窗口内容的大小超过屏幕大小,窗口可能会从屏幕溢出。因此,您必须考虑:

MaxWidth="600"
MaxHeight="400"

MaxHeight="400"没有被遵守时该怎么办?它会增长到屏幕限制吗? - andrepaulo

3

你无法将窗口高度设置为自动,但可以通过一个小技巧实现。给主网格容器命名,将其高度设置为自动,然后将窗口高度绑定到主网格的高度。


这种方法需要小心处理,因为您不希望整个窗口的高度与主网格的高度匹配;您希望窗口的内容区域的高度与网格的高度匹配。 - M Kloster

1
你可以做以下事情:
MaxWidth = SystemParameters.MaximizedPrimaryScreenWidth;
MaxHeight = SystemParameters.MaximizedPrimaryScreenHeight;
SizeToContent = SizeToContent.WidthAndHeight;

请注意,仅使用SizeToContent将起作用。但是,如果您的内容大小超过屏幕,则窗口将溢出屏幕,但将其与将窗口的MaxWidthMaxHeight设置为与您的屏幕相同,基本上将窗口适合最大屏幕内容。

-1

使用已加载的事件窗口设置当前屏幕的大小


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接