在 WPF 中启用最大化、最小化和恢复窗口(禁用手动调整大小)

发布于 2024-08-19 19:45:52 字数 238 浏览 12 评论 0原文

我需要在我的应用程序(C# WPF 应用程序)上启用以下功能:

  1. 正常大小为 1024*768
  2. 用户可以最大化应用程序
  3. 用户可以最小化应用程序
  4. 用户可以恢复应用程序 (1024*768)
  5. 用户无法手动调整大小通过拖动应用程序的边框。

没有任何 ResizeMode 可以满足所有这些要求。有什么办法可以做吗?

I need to enable the following on my application (C# WPF application):

  1. Have normal size of 1024*768
  2. The user can maximize the application
  3. The user can minimize the application
  4. The user can restore the application (1024*768)
  5. The user cannot manually resize the application by draging its border.

There isn't any ResizeMode the fulfills all of those requirements. Is there any way to do do?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

习ぎ惯性依靠 2024-08-26 19:45:53

我终于找到了一个相对不错的解决方案。

这个想法是覆盖窗口的 OnStateChanged 事件,取消最小/最大约束并刷新它。

如果窗口没有最大化,我们只需应用回最小/最大约束

    protected override void OnStateChanged(EventArgs e)
    {
        if (WindowState == WindowState.Maximized)
        {
            MinWidth = 0;
            MinHeight = 0;
            MaxWidth = int.MaxValue;
            MaxHeight = int.MaxValue;

            if (!m_isDuringMaximizing)
            {
                m_isDuringMaximizing = true;
                WindowState = WindowState.Normal;
                WindowState = WindowState.Maximized;
                m_isDuringMaximizing = false;
            }
        }
        else if (!m_isDuringMaximizing)
        {
            MinWidth = 1024;
            MinHeight = 768;
            MaxWidth = 1024;
            MaxHeight = 768;
        }

        base.OnStateChanged(e);
    }

I've finally found a relatively decent solution.

The idea is to overide the OnStateChanged event of the window, cancel the Min/Max constraints and refresh it.

If the window is not maximized, we simply apply back the Min/Max constraints

    protected override void OnStateChanged(EventArgs e)
    {
        if (WindowState == WindowState.Maximized)
        {
            MinWidth = 0;
            MinHeight = 0;
            MaxWidth = int.MaxValue;
            MaxHeight = int.MaxValue;

            if (!m_isDuringMaximizing)
            {
                m_isDuringMaximizing = true;
                WindowState = WindowState.Normal;
                WindowState = WindowState.Maximized;
                m_isDuringMaximizing = false;
            }
        }
        else if (!m_isDuringMaximizing)
        {
            MinWidth = 1024;
            MinHeight = 768;
            MaxWidth = 1024;
            MaxHeight = 768;
        }

        base.OnStateChanged(e);
    }
北城半夏 2024-08-26 19:45:53

您可以侦听 Window.SizeChanged 事件,并在处理程序中手动将宽度和高度设置回 1027 和 768。它仍然允许用户拖动窗口的边缘来调整大小,但随后窗口将返回到其设置的大小。这样做的缺点是,每当用户尝试调整大小时,窗口就会“卡住”——这不是最漂亮的事情。照常最小化和最大化工作。

You can listen to the Window.SizeChanged event, and inside your handler manually set Width and Height back to 1027 and 768. It still allows the user to drag the window's edges to resize, but then the window returns to it's set size. The drawback of this is that the window has a "seizure" whenever the user tries resizing--not the prettiest thing to see. Minimize and Maximize work as normal.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文