2016-01-26 89 views
0

我想保持窗口始終最大化,它可以在單個屏幕中完美工作。但是,當我使用兩個屏幕(特別是當主屏幕變化時),我捕捉到分辨率改變的事件並使其最大化,但它不起作用。我試圖處理窗口的寬度和高度,它也不起作用。WPF:在開關主屏幕上保持窗口最大化

這裏是我是如何運作的:

  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" /> 

回答

1

你提到它的工作原理有時,但並非總是如此。也許並非立即對設置更改作出反應,您應該使用調度程序對響應進行排隊,以便在事情安頓下來之後運行。

在你SystemEvent_DisplaySettingsChanged方法,嘗試代碼更改爲此:

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

我沒有試圖重現您的問題,所以我不能肯定地說這是否會工作。這似乎值得一試。

編輯:設置窗口狀態爲正常第一,以防它認爲它已經最大化。

+0

很好推薦,其實我已經試過了,而且我很肯定WindowState在此之後被設置爲最大化,它只是沒有效果。 – McHo

+0

也許'WindowState'屬性已經被設置爲'Maximized'(儘管窗口沒有出現最大化),所以儘早設置爲'Maximized'會返回並且不會嘗試實際執行任何操作。您是否嘗試將其設置爲「正常」,然後再次回到「最大化」?我更新了我的答案,以表明我的意思。 – Xavier

+0

酷,它的工作原理!這與你所說的完全相同,它認爲它已經最大化了。非常感謝你。 – McHo