1. 程式人生 > >WPFの獲取螢幕解析度並自適應 wpf窗體定位

WPFの獲取螢幕解析度並自適應 wpf窗體定位

原文: WPFの獲取螢幕解析度並自適應

double x = SystemParameters.WorkArea.Width;//得到螢幕工作區域寬度

double y = SystemParameters.WorkArea.Height;//得到螢幕工作區域高度

double x1= SystemParameters.PrimaryScreenWidth;//得到螢幕整體寬度

double y1 = SystemParameters.PrimaryScreenHeight;//得到螢幕整體高度

this.Width = x1;//設定窗體寬度 this.Height = y1;//設定窗體高度

 或者:(獲取整體)

            int SW = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width;
            int SH = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height;

 

C# 根據不同螢幕解析度自動適應螢幕 C# 根據不同螢幕解析度自動適應螢幕
------解決方案-------------------------------------------------------- 使用 TableLayoutPanel 佈局 + 設定 Dock Anchor 屬性。 ------解決方案-------------------------------------------------------- 如果只是元件位置的話,可以設定dock和anchor等 如果是還有其他特殊要求,就要自己根據實際解析度來計算一些屬性了 ------解決方案-------------------------------------------------------- 窗體的windowstate設定為maximized,載入的時候自動鋪滿螢幕。 如果想做其他操作的話Rectangle rect = System.Windows.Forms.SystemInformation.VirtualScreen; 螢幕寬度=rect.width,高度=rect.height

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;

儘管使用這些程式碼和將視窗的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( )方法顯示之前定位視窗。

據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;

儘管使用這些程式碼和將視窗的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( )方法顯示之前定位視窗。