[WPF 学习] 9.自定义一个Window的样子
程序员文章站
2023-02-18 12:51:45
基本思路是把原来的WindowStyle设置为None,然后自己弄一个标题栏 一、xmal 二、后台代码(几个事件) ......
基本思路是把原来的windowstyle设置为none,然后自己弄一个标题栏
一、xmal
<window x:class="ykcore.windowsetup" name="winmain" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:ykcore" mc:ignorable="d" windowstate="maximized" windowstyle="none" sizechanged="winmain_sizechanged" height="450" width="800" borderthickness="0" background="{dynamicresource backgroundcolor}" xmlns:theme="clr-namespace:microsoft.windows.themes;assembly=presentationframework.aero2"> <!-- 最大化按钮形状 --> <pathgeometry x:key="pathmaximize"> <pathgeometry.figures> m1,1 l1 ,11 l11,11 l11,1 z m0,0 l12,0 l12,12 l0,12 z </pathgeometry.figures> </pathgeometry> <!-- 还原按钮形状 --> <pathgeometry x:key="pathrestore"> <pathgeometry.figures> m1,3 l1,11 l9,11 l9,3 z m3,1 l3,2 l10,2 l10,9 l11,9 l11,1 z m2 ,0 l12,0 l12,10 l10,10 l10,12 l0,12 l0,2 l2 ,2 z </pathgeometry.figures> </pathgeometry> </window.resources> <grid> <grid.rowdefinitions> <rowdefinition height="50"></rowdefinition> <rowdefinition height="*"></rowdefinition> </grid.rowdefinitions> <border borderbrush="{dynamicresource forecolor}" borderthickness="2,2,2,0" padding="10,0"> <grid> <!--自己画个图标,也就是一个圆角矩形里面写了个字母m--> <rectangle width="30" height="28" stroke="yellow" strokethickness="1" horizontalalignment="left" radiusx="5" radiusy="5" /> <textblock text="m" foreground="yellow" margin="10,0,0,0"> <textblock.rendertransform> <skewtransform anglex="-15"/> </textblock.rendertransform> </textblock> <stackpanel orientation="horizontal" verticalalignment="center" horizontalalignment="right"> <button x:name="btnmin" width="28" height="28" click="btnmin_click" > <path data="m0,5 l12,5 l12,6 l0,6 z" fill="{dynamicresource forecolor}" width="12" height="12"/> </button> <button x:name="btnmax" width="28" height="28" click="btnmax_click"> <path x:name="pmax" fill="{dynamicresource forecolor}" width="12" height="12"/> </button> <button x:name="btnclose" width="28" height="28" click="btnclose_click" > <button.content> <path data="m1,0 l6,5 l11,0 l12,1 l7,6 l12,11 l11,12 l6,7 l1,12 l0,11 l5,6 l0,1 z" fill="{dynamicresource forecolor}" width="12" height="12"/> </button.content> </button> </stackpanel> </grid> </border> <border grid.row="1" borderbrush="{dynamicresource forecolor}" borderthickness="2" padding="10"> <!--原来的window的content--> </border> </grid> </window>
二、后台代码(几个事件)
private void btnclose_click(object sender, routedeventargs e) { application.current.shutdown(); } private void btnmax_click(object sender, routedeventargs e) { this.windowstate = this.windowstate != windowstate.maximized ? windowstate.maximized : windowstate.normal; } private void btnmin_click(object sender, routedeventargs e) { this.windowstate = windowstate.minimized; } private void winmain_sizechanged(object sender, sizechangedeventargs e) { pmax.data = this.windowstate == windowstate.maximized ? resources["pathrestore"] as geometry : resources["pathmaximize"] as geometry; }