【问题标题】:Window Height="Auto" not working as expected窗口高度 =“自动”未按预期工作
【发布时间】:2010-10-23 03:53:31
【问题描述】:

我想要做的是显示一个窗口,它没有明确地具有高度/宽度(两个值都被省略或设置为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

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

【问题讨论】:

  • 您可能还希望将.WindowStartupLocation 设置为"CenterScreen" 的窗口居中

标签: wpf


【解决方案1】:

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

【讨论】:

  • 懒人想复制粘贴SizeToContent="WidthAndHeight";)
  • 小心使用SizeToContent="WidthAndHeight",如果窗口内容的大小超过屏幕大小,窗口可能会溢出屏幕。
  • @KyloRen 因此应设置 MaxWidth 或 MaxHeight 以避免问题
  • @CarlosLiu 很久了,我没有练习过,不记得了,但是从逻辑上讲是的。在演示中尝试:)
  • 这很好,但我仍然很好奇为什么Height="Auto"Width="Auto" 不能完成同样的事情?我猜是因为这些设置没有考虑窗口内容。
【解决方案2】:

老问题但更新了答案:

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

你应该设置SizeToContent="WidthAndHeight"

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

MaxWidth="600"
MaxHeight="400"

【讨论】:

  • MaxHeight="400"不被尊重时怎么办?它会增长到屏幕限制?
【解决方案3】:

你不能将窗口高度设置为自动,为此你可以使用一个小技巧,命名主主网格容器,将其高度设置为自动,然后将窗口高度绑定到主网格的高度

【讨论】:

  • 这种方法需要小心,因为您不希望整个窗口的高度与主网格的高度匹配;您希望窗口的内容区域的高度与网格的高度相匹配。
【解决方案4】:

在当前屏幕中设置大小并加载事件窗口

【讨论】:

    猜你喜欢
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    相关资源
    最近更新 更多