wpf 自定義視窗,最大化時不覆蓋工作列

2021-06-22 21:38:13 字數 1179 閱讀 5967

**:

相信很多人使用wpf時會選擇自定義美觀的視窗,因此會設定windowstyle="none" 取消自帶的標題欄。但這樣使用 windowstate="maximized" 或者後台 this.windowstate = system.windows.windowstate.maximized; 最大化視窗會覆蓋掉系統工作列,即全屏了。這其實並不是個很好的體驗。

在網上找答案,排名靠前的都是提供用hook鉤子,篇幅很長,如:

個人感覺這麼乙個小功能新增那麼多的**是不人性的,於是繼續尋找,終於看到黎明的曙光:

rect rcnormal;//

定義乙個全域性rect記錄還原狀態下視窗的位置和大小。

//////

最大化

/// private

void btnmaximize_click(object

sender, routedeventargs e)

//////

還原

/// private

void btnnormal_click(object

sender, routedeventargs e)

好了,最大化和最小化事件自定義好了。嗯,功能應該夠了吧??其實還不夠,讓我們想想,平時我們拖動視窗的時候,如果視窗拖動到頂端滑鼠出界的話視窗將會最大化是不是?在wpf中 windowstyle="none" 下也還是全屏效果,而且會覆蓋掉我們自定義的效果,你可以試一下,這個時候你的this.width和this.height都無用了。

那該怎麼辦呢?看下邊:

在前台新增:

sizechanged="

window_sizechanged

"

後台:

private

void window_sizechanged(object

sender, sizechangedeventargs e)

}

ok,搞定! 

這麼簡單的**,相信大家看的懂吧~~

另附雙擊標題欄事件:

private

void grid_mousedown(object

sender, mousebuttoneventargs e)

else}}

WPF視窗最大化 不覆蓋工作列

目的 讓視窗初始化時 最大化,只有最小化和關閉按鈕。許多軟體都是如此 分析 網上好多實現都是一大堆 直接使用win的api來獲取各種引數 實現 全屏設定 rect rc systemparameters.workarea 獲取工作區大小 this.left 0 設定位置 this.top 0 thi...

WPF自定義視窗最大化顯示工作列

當我們要自定義wpf視窗樣式時,通常是採用設計視窗的屬性 windowstyle none 然後為視窗自定義放大,縮小,關閉按鈕的樣式。然而這樣的話,當通過 設定視窗 如下 放大時,視窗會把工作列給遮檔住。private void max click object sender,routedeven...

WPF自定義視窗最大化顯示工作列

原文 wpf自定義視窗最大化顯示工作列 當我們要自定義wpf視窗樣式時,通常是採用設計視窗的屬性 windowstyle none 然後為視窗自定義放大,縮小,關閉按鈕的樣式。然而這樣的話,當通過 設定視窗 如下 放大時,視窗會把工作列給遮檔住。private void max click obje...