【问题标题】:Window Size when SizeToContent is not specified未指定 SizeToContent 时的窗口大小
【发布时间】:2009-09-17 06:47:57
【问题描述】:

当使用下面的 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 从哪里获取窗口大小?

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

【问题讨论】:

    标签: .net wpf windows


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我在 MSDN 中找不到任何明确说明默认大小的内容,但 TopLeftWindowStartupLocation 属性描述表明,如果未指定,它们默认为正常的 Win32 默认值。我认为可以合理地假设 HeightWidth 属性会做同样的事情。

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

      【讨论】:

      • 应该说“如果 Window.SizeToContent = WidthAndHeight”。 SizeToContent 采用枚举值,而不是布尔值。 (我一开始也认为它是布尔值。)
      • 视内容而定。如果窗口是某种对话框,我会设置 SizeToContent = WidthAndHeight,但对于普通的应用程序 UI 窗口,我会设置 SizeToContent = Manual
      【解决方案3】:

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

      当没有指定任何尺寸时,我认为窗口会为您的窗口提供默认高度和宽度。

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

      【讨论】:

      • 不是一个真正的答案。这是“手动”设置的定义方式(手动调整大小时的窗口大小)。问题是它是从哪里获得的。
      • 记事本正在向注册表写入和读取其位置:[HKEY_CURRENT_USER\Software\Microsoft\Notepad] 这是大多数应用程序(包括第 3 方)的最佳实践。
      【解决方案4】:

      我认为您要查找的信息隐藏在 FrameworkElement.Width (link) 的文档中。

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

      因此,由此,我希望在没有设置其他约束(例如MaxWidthMinWidthWidth 等)时,Window 的宽度/高度由默认样式确定一个窗口。

      编辑:

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

      【讨论】:

        猜你喜欢
        • 2011-01-09
        • 2011-11-04
        • 1970-01-01
        • 2014-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-08
        相关资源
        最近更新 更多