未指定SizeToContent时的窗口大小

时间:2009-09-17 06:47:57

标签: .net wpf windows

当使用以下XAML时,窗口大小不是5000x5000,而是一些裁剪按钮的小窗口。

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" >
    <Button Width="5000" Height="5000">XXX</Button>
</Window>

据我所知,size我没有指定SizeToContent属性,默认为“Manual”,因此它将使用*size of a window is determined by other properties, including Width, Height, MaxWidth, MaxHeight, MinWidth, and MinHeight. *WPF Windows Overview开始,似乎其他属性是FrameworkElement: :MinHeight / Width和FrameworkElement :: MaxHeight。但由于Mins的默认值为0,因此Maxs为Infinity,而Width / Height为Nan ......这是怎么回事? WPF在哪里获得窗口大小?

任何指向正确方向的指标都将受到赞赏。

4 个答案:

答案 0 :(得分:4)

如果未指定宽度和高度,WPF将使用主屏幕宽度的60%(实际显示窗口的位置)和60%的高度。这是由应用程序单例完成的,所有Windows最终都会注册自己。

答案 1 :(得分:1)

我在MSDN中找不到任何明确说明大小默认值的内容,但TopLeftWindowStartupLocation属性说明它们默认为正常的Win32默认值如果没有指定。我认为假设HeightWidth属性也会这样做是合理的。

如果您不希望窗口发生这种情况,则必须明确设置Width元素的HeightSizeToContentWindow属性根据您的要求。您在Button元素上设置的显式尺寸只会对Window Window.SizeToContent = True产生影响。

答案 2 :(得分:0)

我猜操作系统为窗口提供了这些值。它可能与Windows操作系统在上次关闭之前记住任何窗口的大小有关。*

同样地,我认为当没有指定尺寸时,窗口为窗口提供了默认的高度和宽度。

  • 你可以用记事本试试。打开它。调整大小。关闭它。现在再次打开它。嗯..

答案 3 :(得分:0)

我认为您所寻找的信息已隐藏在FrameworkElement.Widthlink)的文档中。

  

除了可接受的Double值之外,此属性也可以是Double.NaN。这是您指定自动调整大小行为的方式。在XAML中,将值设置为字符串“Auto”(不区分大小写)以启用自动调整大小行为。自动调整大小行为意味着元素将填充可用的宽度。 请注意,特定控件经常提供默认样式的默认值,这将禁用自动调整大小行为,除非专门重新启用。 [我的重点]

因此,在没有设置其他约束的情况下(例如MaxWidthMinWidthWidth等),我会期望窗口的宽度/高度。由窗口的默认样式决定。

修改

看起来它更可能来自Window类本身调用的函数,该函数考虑了所有约束加上监视器大小。