未指定SizeToContent时的窗口大小

当使用以下XAML时,窗口大小不是5000×5000,而是button被裁剪的一些小窗口。

<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> 

从我所知道的大小,我没有指定的SizeToContent属性,默认是“手动”,所以它会使用*窗口的大小由其他属性,包括宽度,高度,MaxWidth,MaxHeight,MinWidth和MinHeight 。 *从WPF Windows概述看来,其他属性是FrameworkElement :: MinHeight / Width和FrameworkElement :: MaxHeight。 但是,由于分钟的默认值为0,最大值是无穷大,宽度/高度是楠….发生了什么事? WPF在哪里获得窗口大小?

任何指向正确的方向将不胜感激。

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

我无法在MSDN中找到任何明确指定默认大小的东西,但TopLeftWindowStartupLocation属性说明如果未指定,则默认为默认的常规Win32默认值。 我认为这是合理的假设HeightWidth属性会做同样的。

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

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

同样的方式,我想窗口提供了一个默认的高度和宽度的窗口,当没有任何指定的尺寸。

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

我认为你正在寻找的信息被埋在了FrameworkElement.Width ( 链接 )的文档中。

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

所以,从这个角度来看,当没有其他的约束条件时(比如MaxWidthMinWidthWidth等等),窗口的宽度/高度是由Window的默认样式决定的。

编辑:

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