我希望保持窗口始终最大化,它在单个屏幕中完美运行。但是当我使用两个屏幕时(特别是当主屏幕改变时),我抓住分辨率改变事件并使其最大化,但它不起作用。我试图处理窗口的宽度和高度,它也不起作用。
这是我的运作方式:
这是我的代码:
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" />
答案 0 :(得分:1)
你提到它有时会起作用,但并非总是如此。也许不是立即对设置更改作出反应,而是应该让调度程序对响应进行排队,以便在事情稳定后再运行。
在SystemEvent_DisplaySettingsChanged
方法中,尝试将代码更改为:
WindowState = WindowState.Normal;
Dispatcher.BeginInvoke(new Action(() => WindowState = WindowState.Maximized), DispatcherPriority.Background);
我没有尝试重现您的问题,因此我无法确定这是否有效。这似乎值得一试。
编辑:首先将窗口状态设置为正常,以防它认为已经最大化。