WPF 建立自定義窗體

2021-09-19 21:55:53 字數 4819 閱讀 2275

原文:

wpf 建立自定義窗體

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

實現思路,在windows controltemplate中增加8個背景透明rectangle,分別放置於left, right, top, topleft, topright, bottom, bottomleft, bottomright這8個位置,

xaml:

<

controltemplate

x:key

="metrowindowcontroltemplate"

targettype=""

>

<

border

borderthickness

="1"

borderbrush

="lightblue"

background

="white"

>

<

grid

>

<

grid

>

<

grid.rowdefinitions

>

<

rowdefinition

height

="auto"

/>

<

rowdefinition

/>

grid.rowdefinitions

>

<

grid.columndefinitions

>

<

columndefinition

/>

<

columndefinition

width

="auto"

/>

grid.columndefinitions

>

<

rectangle

x:name

="moveablerectangle"

fill

="lightgray"

grid.row

="0"

grid.column

="0"

/>

<

stackpanel

grid.row

="0"

grid.column

="1"

orientation

="horizontal"

background

="lightgray"

>

<

button

x:name

="minimizebutton"

style=""

content

="0"

/>

<

button

x:name

="restorebutton"

style=""

content

="1"

/>

<

button

x:name

="closebutton"

style=""

content

="r"

/>

stackpanel

>

<

grid

background=""

grid.row

="1"

grid.columnspan

="2"

margin

="5,5,5,5"

>

<

adornerdecorator

>

<

contentpresenter

/>

adornerdecorator

>

grid

>

grid

><

grid

x:name

="resizegrid"

>

<

rectangle

stroke=""

fill

="transparent"

verticalalignment

="top"

height

="5"

x:name

="top"

margin

="5,0,5,0"

/>

<

rectangle

stroke=""

fill

="transparent"

x:name

="bottom"

height

="5"

verticalalignment

="bottom"

margin

="5,0,5,0"

/>

<

rectangle

stroke=""

fill

="transparent"

horizontalalignment

="left"

margin

="0,5,0,5"

width

="5"

x:name

="left"

/>

<

rectangle

stroke=""

fill

="transparent"

margin

="0,5,0,5"

width

="5"

horizontalalignment

="right"

x:name

="right"

/>

<

rectangle

stroke=""

fill

="transparent"

horizontalalignment

="left"

verticalalignment

="bottom"

width

="5"

height

="5"

x:name

="bottomleft"

/>

<

rectangle

stroke=""

fill

="transparent"

verticalalignment

="bottom"

height

="5"

width

="5"

horizontalalignment

="right"

x:name

="bottomright"

/>

<

rectangle

stroke=""

fill

="transparent"

horizontalalignment

="right"

width

="5"

height

="5"

verticalalignment

="top"

x:name

="topright"

/>

<

rectangle

stroke=""

fill

="transparent"

horizontalalignment

="left"

width

="6"

verticalalignment

="top"

height

="5"

x:name

="topleft"

/>

grid

>

grid

>

border

>

controltemplate

>

c#:metrowindowcontroltemplate

") as

controltemplate;

if(template != null

) }}

}private

void resizerectangle_previewmousedown(object

sender, mousebuttoneventargs e)}}

private

void resizerectangle_mousemove(object

sender, mouseeventargs e)}}

[dllimport(

"user32.dll

", charset =charset.auto)]

private

static

extern

intptr sendmessage(intptr hwnd, uint32 msg, intptr wparam, intptr lparam);

private

void

resizewindow(resizedirection direction)

到此為止,就實現了乙個可以拖拽改變大小的自定義窗體。

執行效果:

WPF設計 自定義窗體

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

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...