前言
在建立wpf應用的時候,你第乙個看到的就是窗體類。它作為窗體的基礎,提程式設計客棧供標準的邊框、工具條、最大化、最小化和關閉按鈕。wpf窗體是xaml檔案和後台**檔案的混合體。
本文將詳細介紹umqrvgq關於wpf窗體最大化問題的相關內容,下面話不多說了,來一起看看詳細的介紹吧
遇到的問題資訊
問題:當windowstyle=none時,視窗最大化,不顯示工作列 —— 即窗體是全屏效果。
解決中遇到的問題列表【主要涉及到工作列發生改變後的一些問題處理】:
解決方案
思路:窗體最大化時,將窗體透明化,設定內部元素grid的margin屬性,從而顯示出工作列
步驟:1、 設定窗體相關屬性:windowstyle="none" allowstransparency="true" background="transparent" resizemode="canmiwww.cppcns.comnimize"
窗體需要支援透明,並將窗體設定為透明;設定resizemode,否則最大化時,邊框會有影響。
2、 新增窗體最大化/還原**如下:
double normaltop;
double normalleft;
double normalwidth;
double normalheight;
///
/// 最大化/還原處理
///
///
///
private void btn_maximize_click(object sender, routedeventargs e)
else
}3、新增工作列變化處理
注意:此節實現僅適用於.net framework 4.5及以上。因為4.0及以前的版本中不包含staticpropertychanged事件。
不過可以通過wndproc來自己實現,其中會有乙個問題:利用wndproc來監聽,結果是比較實時的,而systemparameters中的值,實時性可能會跟不上,從而獲取到的值仍然是舊的。
對此有兩種解決方案:
* 1、新增乙個timer 或者 直接sleep,等待一下在systemparameters的值【此法相對簡單,但無法完全保證有效,畢竟systemparameters中值更新的時間,還是要看.net framework】;
* 2、利用windows api讀取系統值,用方法systemparametersinfo獲取spi_getworkarea【微軟官方其實就是用這個獲取的,這樣比***的執行效率還要高些】
另外:下面的方法可能會有系統相容性問題,我在windows 10上是通過的,但在windows 8.1上,邊界存在問題【不確定是不是framework在系統上有bug】
註冊事件:systemparameters.staticpropertychanged += systemparameters_staticpropertychanged;
新增如下**:
private void systemparameters_st程式設計客棧aticpropertychanged(object sender, system.componentmodel.propertychangedeventargs e)
}}相關**
點選檢視完整源**
總結本文標題: wpf中窗體最大化問題的解決方法
本文位址:
WPF窗體禁用最大化按鈕
禁用wpf窗體的最大化按鈕可以使用windows api改變按鈕狀態的方法實現。使用getwindowlong可以得到當前按鈕的狀態。使用setwindowlong可以設定按鈕的狀態。使用setwindowpos進行介面的更新。下面是這幾個api的宣告。dllimport user32.dll en...
禁用WPF窗體的最大化按鈕
出自 設定resizemode noresize 可去掉最大化和最小化按鈕 但沒法再拖曳改變窗體大小 ws clipsiblings 0x04000000 ws clipchildren 0x02000000 ws visible 0x10000000 ws disabled 0x08000000 ...
禁用WPF窗體的最大化按鈕
出自 設定resizemode noresize 可去掉最大化和最小化按鈕 但沒法再拖曳改變窗體大小 ws clipsiblings 0x04000000 ws clipchildren 0x02000000 ws visible 0x10000000 ws disabled 0x08000000 ...