C# 单博弈最大化窗口事件

C# 单博弈最大化窗口事件,c#,mono,xna,monogame,C#,Mono,Xna,Monogame,我在尝试使用monogame和c#实现事件时遇到了问题。当前,当调整窗口大小时,我调用一个事件: this.Window.ClientSizeChanged += new EventHandler<EventArgs>(Window_ClientSizeChanged); void Window_ClientSizeChanged(object sender, EventArgs e) { int width

我在尝试使用monogame和c#实现事件时遇到了问题。当前,当调整窗口大小时,我调用一个事件:

        this.Window.ClientSizeChanged += new EventHandler<EventArgs>(Window_ClientSizeChanged);

        void Window_ClientSizeChanged(object sender, EventArgs e)
        {
            int width = Window.ClientBounds.Width;
            int height = Window.ClientBounds.Height;
            if (width > 0 && height > 0)
            {
                graphics.PreferredBackBufferWidth = width;
                graphics.PreferredBackBufferHeight = height;
                graphics.ApplyChanges();
             }
        }
然而,这是一个我并不特别喜欢的解决方案,因为它依赖于包含System.Windows.Forms,而且因为有一天我可能想为其他平台构建id,而不是包含任何特定的Windows库


是否有任何单游戏功能可以处理每个平台的最大化/最小化事件调用,或者是否由最终用户来实现这些功能?

我也遇到过这个问题,并且在单游戏API中没有找到任何“内置”解决方案

我提出的解决方案是在每一帧的开头检查
窗口的宽度和高度。ClientBounds
是否已更改。

它检测所有窗口的大小调整与
窗口类似。ClientSizeChanged
事件,但也检测通过最大化/恢复窗口而进行的大小调整。

通过Mono在多个平台上支持Windows窗体,具体取决于您要支持的平台,这甚至不是问题,你的答案和评论都是正确的,但是我选择了实施你的建议,因为如果代码库发生变化,它看起来更容易修改。然而,如果你想重新创建一个特定的分辨率和窗口状态(最大化或最小化),那么你需要使用winforms…令人烦恼的是…因为这似乎是确保其正确大小+最大化的唯一方法。不管怎样,这都是一个有用的解决方案!感谢您注意,当客户端最小化时,您将有一个ClientBounds(0,0,0,0),因此如果您检查每个更新,请将其考虑在内。
Form form = (Form)Control.FromHandle(Window.Handle);
form.WindowState = FormWindowState.Maximized;