這幾天,因工作需要,要對乙個小軟體進行ui調整。主要內容就是讓其能夠實現自適應窗體(包括文字和圖示),做成像win7下的media center一樣的ui。自適應窗體,顧名思義,就是視窗內容的顯示大小能夠隨著視窗的大小變化而變化。今天我來說說如何用wpf來實現自適應窗體。
首先wpf是微軟推出的新一代視窗系統,用來代替mfc。用mfc來實現自適應窗體,需要捕獲resizing事件,然後對視窗內容大小進行逐一調整,還是比較麻煩的。但是wpf不同,因為wpf自帶的layout(wpf布局系統)就支援自適應窗體。
wpf要實現自適應窗體主要靠grid和dockpanel這2個控制項。這2個控制項簡單來說就是容器,用來承載其它控制項。不同的是grid是定義由行和列組成的靈活網格區域,而dockpanel是定義可水平或垂直排列子元素的區域。
下面我來舉個例子說明如何用grid或dockpanel來實現自適應窗體。
讓我們新建乙個wpf工程,完成後我們開啟對應的xaml檔案,可以看到vs已經自動新增了這一對標籤,下面我就以grid為例展示如何實現窗體自適應(如果需要使用dockpanel只需把換成即可)。
xmlns=""
xmlns:x=""
title="mainwindow" height="350" width="525">
下面往grid裡面新增2個控制項textblock和button,如下:
xmlns=""
xmlns:x=""
title="mainwindow" height="350" width="525">
注意:這裡不能給textblock和button定義高度和寬度,因為這樣會把控制項的高度和寬度定死,結果就是不能隨著視窗大小的變化而變化。那要怎麼調整控制項的初始大小呢?用margain!!margain不是只能調整位置,它也可以調整控制項大小哦。
讓我們來看看效果怎樣:
通過上面2張圖,我們可以看到控制項確實隨著視窗大小的變化而變化,但是我們又發現無論是textblock還是button的文字並沒有隨著視窗變化,這是為什麼呢?那是因為grid和dockpanel不支援文字的自動變化。
那文字是不是就沒辦法自動變化了呢?放心wpf提供另外乙個控制項viewbox,用於支援文字變化。讓我們修改一下剛才的**,如下:
xmlns=""
xmlns:x=""
title="mainwindow" height="350" width="525">
效果如下:
如果加了viewbox,畫面的布局可能比較難以調整,這個時候就需要用到width和height這2個屬性了。讀者可能有疑問了,為什麼不加viewbox只用grid或dockpanel不能指定width和height,而viewbox就可以。那是因為viewbox其實是靠stretch這個屬性實現文字的自動變化,這也意味著viewbox是通過拉伸或平鋪來達到縮放文字的效果,就好比位圖。而grid和dockpanel就好比向量圖。
**如下:
xmlns=""
xmlns:x=""
title="mainwindow" height="350" width="525">
效果:
好了,讓我們來總結一下:
1、 wpf採用grid和dockpanel來實現窗體自適應,通過控制項的margain屬性來調整控制項的起始位置和大小,不能使用height和width屬性;
2、 如果要實現文字自動變化,採用viewbox控制項,可以使用height和width來調整控制項大小;
3、 想偷懶的話,可以把mainwindow的最外面一層grid放入viewbox中,這樣只需稍微調整一下某些控制項的布局即可達到整個窗體的自適應效果。
這是我第一次寫部落格,寫的不好,請大家體諒。
WPF自適應窗體實現小結
wpf自適應窗體實現小結 這幾天,因工作需要,要對乙個小軟體進行ui調整。主要內容就是讓其能夠實現自適應窗體 包括文字和圖示 做成像win7下的media center一樣的ui。自適應窗體,顧名思義,就是視窗內容的顯示大小能夠隨著視窗的大小變化而變化。今天我來說說如何用wpf來實現自適應窗體。首先...
WPF窗體自適應解析度
使用wpf建立乙個窗體 window 時,如果設定了固定的高度 height 和寬度 width 一旦使用者的電腦解析度過低,就會使得窗體及其中的內容無法完整地顯示出來。要解決這個這個問題,有以下幾個方法可供參考 viewbox如下 window x class xmlns xmlns x titl...
Qt實現窗體自適應
qt實現窗體自適應,讓視窗在放大縮小時,控制項自動適應窗體大小,使用resizeevent事件實現。具體步驟如下 1 在標頭檔案中定義成員變數 qlistm objlist qmapm objmap 同時宣告resizeevent事件 public void resizeevent qresizee...