WPF無邊框視窗滑鼠拖動縮放大小

2021-08-09 18:22:56 字數 3083 閱讀 9376

通常,我們會 通過allowstransparency=」true」、 windowstyle=」none」 這兩個屬性將wpf視窗的邊框去掉,由於邊框沒了,我們就不能通過滑鼠指標懸停在某一邊上拖動改變視窗的大小,此時若要能調整視窗大小,官方倒也提供了個屬性:resizemode=」canresizewithgrip」,這麼一設定,我們會發現視窗右下角多出乙個三角標記,此時可以將滑鼠指正懸停在這個標記上,進而拖動改變視窗的大小,這確實能解決問題,但是產品經理那過不了啊= =,「別的軟體都可以在邊框上調整呀」,orz…

首先,我們不可能在每乙個視窗xaml裡都加上邊角,而是要寫乙個視窗模板,然後讓需要能縮放的視窗繼承這個模板就行了。

ok,建立乙個視窗模板的資源檔案:

""

xmlns:x="">

"customwindowtemplete" targettype="window">

"transparent" borderthickness="12" x:name="outborder">

"15" color="#000000"

opacity=".25"

direction="90" shadowdepth="1"/>

"1"/>

"1"/>

grid.rowdefinitions>

"1"/>

"1"/>

grid.columndefinitions>

grid.row="1"

grid.column="1"

background="white" >

grid>

grid.row="0"

grid.column="0"

opacity=".25"/>

grid.row="0"

grid.column="1"

opacity=".25"/>

grid.row="0"

grid.column="2"

opacity=".25"/>

grid.row="1"

grid.column="0"

opacity=".25"/>

grid.row="1"

grid.column="2"

opacity=".25"/>

grid.row="2"

grid.column="0"

opacity=".25"/>

grid.row="2"

grid.column="1"

opacity=".25"/>

grid.row="2"

grid.column="2"

opacity=".25"/>

grid>

property="allowstransparency"

value="true"/>

property="windowstyle"

value="none"/>

property="template"

value="">setter>

style>

source="resources/customcolor.xaml"/>

source="resources/vcreditwindow.xaml"/>

resourcedictionary.mergeddictionaries>

resourcedictionary>

再新建乙個基類視窗:

public
class vcreditwindowbehindcode : window

,,,,,,,

}; public

enum resizedirection

[dllimport("user32.dll", charset = charset.auto)]

public

static

extern intptr sendmessage(intptr hwnd, uint msg, intptr wparam, intptr lparam);

public

vcreditwindowbehindcode()

void vcreditwindowbehindcode_mousemove(object sender, mouseeventargs e)}}

void vcreditwindowbehindcode_sourceinitialized(object sender, eventargs e)

void vcreditwindowbehindcode_loaded(object sender, routedeventargs e)

}public

void

resizepressed(object sender, mouseeventargs e)

}public

void

resizewindow(resizedirection direction)

}注意建構函式裡的3個事件,在這3個事件裡分別做了一系列的初始化工作。這裡真正改變視窗大小的**其實是user32裡的sendmessage方法。

下來就到了具體的視窗了:

在視窗屬性裡引入命名空間: xmlns:vcredit=」clr-namespace:vcreditchat.resources」

然後把視窗最外層的標籤window替換成vcredit:vcreditwindowbehindcode,也就是剛剛那個基類視窗

再引用一下剛剛資源裡定義的樣式:style=」」

最後在視窗的後台**裡繼承一下基類視窗類: public partial class chatsingle : vcreditwindowbehindcode

以上就完成了滑鼠在邊框拖動調整無邊框視窗大小的功能了,但是還有個問題,就是我們將border的borderthickness設定成了12,如果最大化視窗會發現,視窗離電腦螢幕邊框還有12畫素的空白,此時我們就要在最大化時通過後台**動態設定borderthickness=0,在視窗正常化時再恢復12。

WPF無邊框拖動 全屏 縮放

先看效果 無邊框設定windowstyle none 視窗無關閉及縮放按鈕,但還有黑邊 設定allowstransparency true 黑邊沒有了。全屏,遮住工作列 this.windowstate system.windows.windowstate.normal this.windowsty...

WPF 無邊框窗體滑鼠拖動改變大小和移動

protected override void onsourceinitialized eventargs e protected virtual intptr wndproc intptr hwnd,int msg,intptr wparam,intptr lparam,ref bool hand...

WPF 建立無邊框的圓角視窗

首先將窗體的背景設為透明,將允許透明的屬性設定為true,即 background transparent allowstransparency true 將window的windowstyle屬性設定為none,即windowstyle none 當allowstransparency true ...