原文:
wpf 建立自定義窗體
在前面的一篇部落格"wpf 自定義metro style窗體",展示了如何建立乙個類似於metro style的window,並在程式中使用。但是這個窗體不能夠自由的改變大小。今天的部落格中將展示如何建立乙個可以通過拖拽來改變大小的metro style窗體。
實現思路,在windows controltemplate中增加8個背景透明rectangle,分別放置於left, right, top, topleft, topright, bottom, bottomleft, bottomright這8個位置,
xaml:
<c#:metrowindowcontroltemplatecontroltemplate
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
>
") 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...