WPF 分辨率自適應,獲取當前系統分辨率+窗口當前坐標


前面來自:http://www.cnblogs.com/xuxiaona/archive/2013/03/28/2987193.html

使用WPF創建一個窗體(Window)時,如果設置了固定的高度(Height)和寬度(Width),一旦用戶的電腦分辨率過低,就會使得窗體及其中的內容無法完整地顯示出來。要解決這個這個問題,有以下幾個方法可供參考:

1、無論將窗體做成全屏的(WindowState="Maximized"),還是設置了固定的窗體大小,都可以利用DockPanel控件來進行布局。DockPanel控件有一個特殊的屬性:LastChildFill="True",可以使該控件中的最后一個元素自動填充滿剩下的位置。

    如,某頁面,最上方是一個下拉框,最下方是一個按鈕,中間是一個列表。可以按如下寫法進行布局:

    <DockPanel LastChildFill="True">

    <ComboBox Height = "20" DockPanel.Dock="Top"/>

    <Button Height = "20" DockPanel.Dock="Bottom"/>

    <ListView DockPanel.Dock="Top">......</ListView>

    </DockPanel>

     這樣即使列表控件ListView看上去是放在DockPanel的最后的位置,但其實是填充在了下拉框ComboBox和按鈕Button之間的位置。由於下拉框和按鈕都指定了具體的高度,因此該頁面中間的大片空白就被ListView全部填滿,不需要為ListView指定一個具體的高度或寬度。

     無論分辨率如何變化,只要窗體是能夠完整顯示出來的,窗體中的元素都能夠正常顯示。

 

2、如果窗體不是全屏的,設置了具體的高度或寬度,在有些分辨率下連窗體都無法顯示完全,那么上述方法也無法解決問題。只能使用ViewBox控件,該控件可拉伸和縮放單個子元素以填滿可用空間。

     一個 Viewbox 只能具有一個Child,需要將ViewBox作為窗體中的最外層元素,將所有控件都包括在其中,如:

    <Window>

    <View>

      <DockPanel>

        ......

      </DockPanel>

    </View>

    <Window>

    再將所有控件放到DockPanel中進行布局。經過ViewBox處理過的窗體,在分辨率不足以顯示原定大小的情況下,會根據分辨率將窗體、窗體中的所有控件,包括字體大小,都按比例自動進行縮放。
c# 顯示桌面分辨率、窗口寬高、窗口初始位置、窗口當前位置、窗口當前坐標

System.Windows.Forms.SystemInformation.WorkingArea.Width 屏幕寬度System.Windows.Forms.SystemInformation.WorkingArea.Height屏幕高度(不包括系統任務欄)
this.Size.Width自己窗體的寬度,this.Size.Width自己窗體的高度
this.ClientRectangle.Width 工作區域寬度

this.ClientRectangle.Height工作區域高度

設置窗口初始位置

this.StartPosition = FormStartPosition.Manual; //窗體的位置由Location屬性決定
this.StartPosition = FormStartPosition.CenterParent; //窗體在其父窗體中居中
this.StartPosition = FormStartPosition.CenterScreen; //窗體在當前顯示窗口中居中,尺寸在窗體大小中指定
this.StartPosition = FormStartPosition.WindowsDefaultBounds; //窗體定位在windows默認位置,邊界也由windows默認決定
this.StartPosition = FormStartPosition.WindowsDefaultLocation; //窗體定位在windows默認位置,尺寸在窗體大小中指定

例:

            this.StartPosition = FormStartPosition.Manual; //窗體的位置由Location屬性決定
            this.Location = (Point)new Size(0, 0);         //窗口的起始位置為0,0

創建窗體時設置寬度和高度

this.ClientSize = new System.Drawing.Size(x1,y1); //X1 為寬度,Y1為高度

 

 

獲取窗體的當前坐標/位置

int locationX= this.Location.X;

int locaiontY=this.Location.Y;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM