原文:
wpf窗體定位據WPF外包小編了解,通常,不需要在螢幕上明确定位視窗。而是簡單地将WindowState屬性設定為Normal,并忽略其他所有細節。另一方面,很少會将WindowStartupLocation屬性設定為Manual,并使用Left屬性和Right屬性明确設定視窗的位置。
有時需要更加關注為視窗選擇位置和尺寸。例如,如果建立的視窗太大而不能使用低分辨率顯示器就會遇到麻煩。如果使用一個單視窗應用程式,最好的解決方法是建立可以改變尺寸的視窗。如果使用具有幾個浮動視窗的應用程式,問題就沒有這麼簡單了。
據WPF外包公司小編了解,可以限制視窗的尺寸使其支援最小的顯示器,但是這會讓高端使用者感到沮喪(它們為了在螢幕上一次顯示更多的資訊,專門購買更好的顯示器)。對于這種情況,通常希望在運作時決定視窗的最佳位置。為此,需要使用System.Windows.SystemParameters類來檢索有關螢幕真實狀态的基本資訊。
SystemParameters類包含一些靜态屬性,從中可以得到各種有關系統設定的資訊。例如,可以使用SystemParameters類來決定使用者是否啟用了熱跟蹤(hot tracking)、拖動時顯示視窗内容選項,以及其他選項。對于視窗,SystemParameters類特别有用,因為它提供的兩個屬性可以給出目前螢幕的分辨率:
FullPrimaryScreenHeight屬性和FullPrimaryScreenWidth屬性。這兩個屬性都非常簡單,下面是一些(在運作時将視窗定位在螢幕中央的)示範代碼:
double screeHeight = SystemParameters.FullPrimaryScreenHeight;
double screeWidth = SystemParameters.FullPrimaryScreenWidth;
this.Top = (screenHeight - this.Height) / 2;
this.Left = (screenWidth - this.Width) / 2;
據
WPF外包專家了解,盡管使用這些代碼和将視窗的WindowState屬性設定為CenterScreen效果是相同的,但是使用代碼具有實作不同定位邏輯的靈活性,并且可以在合适的時間執行這些定位邏輯。
更好的選擇是使用SystemParameters.WorkArea矩形,使視窗位于可用螢幕區域的中央。工作區域不包括停靠工作列(以及其他停靠到桌面的工具條)的區域。
double workHeight = SystemParameters.WorkArea.Height;
double workWidth = SystemParameters.WorkArea.Width;
this.Top = (workHeight - this.Height) / 2;
this.Left = (workWidth - this.Width) / 2;
注意:
這兩個示例代碼都存在一個小缺點。當為視窗設定Top屬性時,視窗已經是可見的了,并且視窗會被立即移動和重新整理。當使用後面一行代碼設定Left屬性時會發生同樣的過程。是以,視覺敏銳的使用者會看到兩次視窗移動。遺憾的是,Window類沒有提供一個方法同時設定這兩個位置屬性。唯一的解決方法是在視窗建立之後還未通過調用Show( )方法或ShowDialog( )方法顯示之前定位視窗。