【问题标题】:WPF : Keep the window maximized when switch main screenWPF:切换主屏幕时保持窗口最大化
【发布时间】:2016-01-26 03:17:59
【问题描述】:

我想让窗口始终最大化,它可以在单个屏幕上完美运行。但是当我使用两个屏幕时(特别是当主屏幕发生变化时),我捕捉到分辨率更改事件并使其最大化,但它不起作用。而且我已经尝试过处理窗口的宽度和高度,它也不起作用。

这是我的操作方式:

  1. 使用单个小屏幕(1366 * 768),窗口最大化。
  2. 再连接一个大屏(1920 * 1080),设置为主屏(我们现在有两个屏)。然后窗口会显示在大屏中,并且不会最大化,保持在大小1366*768(奇怪的是它有时会最大化,但并非总是如此)。

这是我的代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        this.WindowState = WindowState.Maximized;
        SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged;
    }

    //this method catch the resolution changed event
    private void SystemEvent_DisplaySettingsChanged(object sender, EventsArgs e)
    {            
        WindowState = WindowState.Maximized;
    }
}

窗口xaml代码:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        ResizeMode="CanMinimize"
        SizeToContent="Manual"
        WindowStartupLocation="CenterScreen" />

【问题讨论】:

    标签: c# wpf window maximize mainscreen


    【解决方案1】:

    您提到它有时会起作用,但并非总是如此。或许您不应立即对设置更改做出反应,而应该将您的响应与调度程序一起排队,以便在事情稳定后运行。

    在您的 SystemEvent_DisplaySettingsChanged 方法中,尝试将代码更改为:

    WindowState = WindowState.Normal;
    Dispatcher.BeginInvoke(new Action(() => WindowState = WindowState.Maximized), DispatcherPriority.Background);
    

    我没有尝试重现您的问题,所以我不能确定这是否可行。不过似乎值得一试。

    编辑:首先将窗口状态设置为正常,以防它认为它已经最大化。

    【讨论】:

    • 好推荐,其实我已经试过了,我很确定之后WindowState设置为Maximized,就是没有效果。
    • 也许WindowState 属性已经设置为Maximized(即使窗口没有显示为最大化),因此将其设置为Maximized 再次提前返回并且不尝试实际执行任何操作.您是否尝试将其设置为Normal,然后再次设置为Maximized?我更新了我的答案以表明我的意思。
    • 酷,它有效!和你说的一模一样,以为已经最大化了。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多