【问题标题】:WPF window maximized width and heightWPF窗口最大化宽度和高度
【发布时间】:2018-12-11 11:22:48
【问题描述】:

TL;DR

似乎将AllowTransparency 设置为True 会使窗口在最大化时向上和向左偏移8 个像素,我需要将其重新显示在屏幕上。

深入

看起来我在某处犯了错误,但不知道为什么。我无法发布整个代码,但我会尝试在这里写下所有相关的内容。

我有我的主窗口,它有一个自定义标题栏。这意味着我必须将WindowsStyle 设置为None,而且我还使用了模板。从一开始,我就遇到了窗口比我的桌面大得多的问题,同时最大化。它在所有方面都在屏幕外 8 像素。我放弃了模板并尝试更改现有窗口以满足我的需要。通过将AllowTransparency 设置回false,我设法消除了侧面的泄漏。然后出现的问题是窗口顶部的边框,我通过将WindowChromeCaptionHeight 设置为0 将其删除。

好的,泄漏消失了。但我相信我目前的问题与我上面写的有关。也就是说,我无法将宽度和高度绑定到某个东西,没有合适的属性。这是我从SystemParameters 尝试的:

SystemParameters.FullPrimaryScreenHeight;
SystemParameters.FullPrimaryScreenWidth;
SystemParameters.MaximizedPrimaryScreenHeight;
SystemParameters.MaximizedPrimaryScreenWidth;
SystemParameters.PrimaryScreenHeight;
SystemParameters.PrimaryScreenWidth;
SystemParameters.WorkArea.Height;
SystemParameters.WorkArea.Width;
SystemParameters.VirtualScreenWidth;

所需的实际高度 (1048) 介于 SystemParameters.WorkArea.Height (1040) 和 SystemParameters.MaximizedPrimaryScreenHeight (1056) 之间。

所需的实际宽度 (1928) 介于 SystemParameters.WorkArea.Width (1920) 和 SystemParameters.MaximizedPrimaryScreenWidth (1936) 之间。

你可以在这里看到模式。

  • MaximizedPrimaryScreenWidth 和 MaximizedPrimaryScreenHeight 都比我需要的大了 8 个像素
  • WorkArea.Width 和 WorkArea.Height 都比我需要的小了 8 个像素
  • 之前我的四面都漏了 8 个像素

这是我的窗口代码

<Window x:Class="MyApp.MainWindow"
        ...
        WindowState="Normal" 
        ResizeMode="CanResizeWithGrip"
        MaxHeight="{Binding SystemParameters.WorkArea.Height}"
        WindowStyle="None">
    <WindowChrome.WindowChrome>
        <WindowChrome CaptionHeight="0"/>
    </WindowChrome.WindowChrome>
    ....content....
</Window>

什么也不起作用:

- Window.Padding
- Window.Margin
- Window.Top
- WindowStyle="SingleBorderWindow"

我拥有但不想要的东西

XAML:
MaxWidth="{Binding MaximumWidth}"

C#
public double MaximumWidth
{
    get
    {
        // I don't want anything hard-coded.
        // Some other (correct) parameter would be fine as well,
        // if we can't get the window on screen.
        return SystemParameters.WorkArea.Width + 8;
    }
}

更新:SingleBorderWindow

这是使用WindowStyle="SingleBorderWindow" 时发生的情况。

因此,我的窗口不仅比我的右边缘和下边缘短 8 像素(绑定到 WorkArea 时),而且您可以看到后面的实际窗口并且按钮是可点击的(即使它们不可见)。真奇怪。就像有两个窗口,但我需要的只有一个不在正确的位置。

【问题讨论】:

  • 无法复制。尝试从头开始构建一个示例,您会看到哪个自定义功能打破了您的窗口。

标签: c# wpf xaml window fullscreen


【解决方案1】:

所需的实际高度 (1048) 介于 SystemParameters.WorkArea.Height (1040) 和 SystemParameters.MaximizedPrimaryScreenHeight (1056)。

所需的实际宽度(1928 年)介于 SystemParameters.WorkArea.Width (1920) 和 SystemParameters.MaximizedPrimaryScreenWidth (1936)。

我认为您需要了解 Windows 分辨率以帮助您解决此问题,并且

我相信 15 英寸窗口的分辨率为 1366 X 768 宽度 x 高度

所以您使用高于此的分辨率将使您的应用程序的大小大于默认系统分辨率。希望对您有所帮助

【讨论】:

  • 不,分辨率与此无关。忘记那些数字,他们在这里作为一个例子。那8个像素是什么问题。而且在所有分辨率下都是一样的,总是8像素太窄太短。
  • 也许身高骗了你。我的屏幕是 1080 像素高,但是这里考虑到了任务栏。
  • 您在项目中使用高于屏幕的分辨率总是会相互冲突
  • 我想我不够清楚。我的首要任务是让应用程序重新出现在屏幕上。我可以获得正确的窗口大小,但这不是一个干净的解决方案。
【解决方案2】:

哦。如果我猜对了,在您为我们隐藏的代码中,在某个事件中,为了最大化您的窗口,您将其宽度更改为 SystemParameters.MaximizedPrimaryScreenWidth。 错误的。绑定到 WindowState 并将其更改为 WindowState.Maximized。

【讨论】:

  • 猜对了,但不是。我通过更改WindowState 来最大化,仅此而已。我确实覆盖了StateChanged 事件,但我只更改了那里的最大化按钮图标。
猜你喜欢
  • 1970-01-01
  • 2012-09-02
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
  • 1970-01-01
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多