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

Nik*_*kos 219 wpf

我要做的是显示一个窗口,没有明确的高度/宽度,(两个值都省略或设置为Auto).我猜测窗口会通过自动计算所有包含的usercontrols大小来找出它的大小,但这实际上并不起作用!

相反,我得到一个大窗口,Actualwidth并将Actualheight值设置为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>
Run Code Online (Sandbox Code Playgroud)

将此窗口显示为对话框:

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
Run Code Online (Sandbox Code Playgroud)

这有解决方案吗?我不想显式设置窗口的大小,因为窗体中的许多控件将根据构造函数参数进行折叠,并且尝试查找窗体的实际大小会很棘手(而且很难看).

Mua*_*Dib 396

设置窗口的属性SizeToContent to "WidthAndHeight".这应该有所帮助.

  • 对于想要复制粘贴的懒人`SizeToContent ="WidthAndHeight"`;) (87认同)
  • 小心使用SizeToContent ="WidthAndHeight",如果窗口内容的大小增加超过屏幕大小,窗口可能会从屏幕溢出. (4认同)
  • @KyloRen 所以应该设置 MaxWidth 或 MaxHeight 以避免出现问题 (2认同)

Vis*_*hal 7

旧问题,但更新的答案:

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

你应该设置SizeToContent="WidthAndHeight".

如果窗口内容的大小增加超过屏幕大小,窗口可能会从屏幕溢出.所以,你必须考虑:

MaxWidth="600"
MaxHeight="400"
Run Code Online (Sandbox Code Playgroud)