WPF設計 自定義窗體

2021-09-07 20:27:07 字數 2305 閱讀 1632

原文:

wpf設計の自定義窗體

效果圖如下:

實現思路:

1.繼承window類

2.為自定義的customwindow類設計窗體樣式(使用blend很方便!)

3.為窗體增加最大最小化和關閉按鈕,並實現滑鼠拖拽改變窗體大小(使用derek bartram的windowresizer.dll庫) 

**說明:

1.繼承window類

建立customwindow類,繼承自system.window 

public class customwindow : window

;

// 解決最大化覆蓋工作列問題

this.sourceinitialized += new eventhandler(win_sourceinitialized);

}

}

2.為自定義的customwindow類設計窗體樣式

窗體樣式的設計可以使用expression blend來進行視覺化開發,非常方便

blend會自動生成樣式的xmal檔案:

3.為窗體增加最大最小化和關閉按鈕,並實現滑鼠拖拽改變窗體大小 

按鈕事件比較簡單,通過分別為三個按鈕新增click事件即可

/// 

/// 載入按鈕事件委託

/// 

private void initializeevent()

;

button maxbtn = (button)basewindowtemplate.findname("btnmax", this);

maxbtn.click += delegate

;

button closebtn = (button)basewindowtemplate.findname("btnclose", this);

closebtn.click += delegate

;

border tp = (border)basewindowtemplate.findname("topborder", this);

tp.mouseleftbuttondown += delegate

;

}

僅僅這樣實現的話還不夠,因為窗體最大化後會覆蓋工作列,這是我們不希望看到的,所以還必須通過window api的視窗控制代碼來定義最大化後的尺寸

/// 

/// 重繪窗體大小

/// 

void win_sourceinitialized(object sender, eventargs e)

...

[dllimport("user32")]

internal static extern bool getmonitorinfo(intptr hmonitor, monitorinfo lpmi);

[dllimport("user32")]

internal static extern intptr monitorfromwindow(intptr handle, int flags);

...

private static system.intptr windowproc(system.intptr hwnd, int msg, system.intptr wparam, system.intptr lparam, ref bool handled)

return (system.intptr)0;

}

最後是實現用滑鼠拖拽改變窗體大小

然後在windows1這個customwindow類的例項中繪製左右及底部5個拖拽熱區(矩形)

最後在window1.xaml.cs中新增事件委託即可 

/// 

/// 載入resize委託

/// 

public void initializeresizehandle()

大功告成了!

WPF設計 自定義窗體

原文 wpf設計 自定義窗體 效果圖如下 實現思路 1.繼承window類 2.為自定義的customwindow類設計窗體樣式 使用blend很方便!3.為窗體增加最大最小化和關閉按鈕,並實現滑鼠拖拽改變窗體大小 使用derek bartram的windowresizer.dll庫 說明 1.繼承...

WPF設計 自定義窗體

效果圖如下 實現思路 1.繼承window類 2.為自定義的customwindow類設計窗體樣式 使用blend很方便!3.為窗體增加最大最小化和關閉按鈕,並實現滑鼠拖拽改變窗體大小 使用derek bartram的windowresizer.dll庫 說明 1.繼承window類 建立custo...

WPF 建立自定義窗體

原文 wpf 建立自定義窗體 在前面的一篇部落格 wpf 自定義metro style窗體 展示了如何建立乙個類似於metro style的window,並在程式中使用。但是這個窗體不能夠自由的改變大小。今天的部落格中將展示如何建立乙個可以通過拖拽來改變大小的metro style窗體。實現思路,在...