在WPF自定义窗体样式时,窗体设置成WindowStyle="None",那么就无法在运行时没有关闭,最小化,最大化按钮。重构窗体时需要加上这三个按钮以及实现功能。
看一下自定义窗体最大化,最小化,关闭效果,鼠标移动动关闭按钮时背景色为红色,表示警告关闭功能,最小化和最大化移动到按钮显示差异颜色。
WPF UI开发教程窗体自定义最小化、最大化、关闭按钮
关闭按钮样式代码如下:
<Style x:Key="SysCloseButtonStyle" TargetType="{x:Type local:NbToggleButton}" BasedOn="{StaticResource SysButtonStyle}">
<Setter Property="Command" Value="{x:Static shell:SystemCommands.CloseWindowCommand}"/>
<Setter Property="NbData" Value="{StaticResource Icon-Close}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:NbToggleButton}">
<Border x:Name="border"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
CornerRadius="{TemplateBinding CornerRadius}"
Effect="{TemplateBinding Effect}"
SnapsToDevicePixels="True">
<Border x:Name="innerBorder"
Background="{TemplateBinding MaskBackground}"
CornerRadius="{TemplateBinding CornerRadius}"
SnapsToDevicePixels="True">
<Viewbox Margin="{TemplateBinding Padding}">
<Path Fill="{TemplateBinding Foreground}"
Data="{TemplateBinding NbData}"
Stretch="Fill"/>
</Viewbox>
</Border>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{Binding Path=Color.Brush_Danger1, Source={x:Static local:NbTheme.Current}}"/>
<Setter Property="MaskBackground" Value="Transparent"/>
<Setter Property="Foreground" Value="{Binding Path=Color.Brush_Text1, Source={x:Static local:NbTheme.Current}}"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="{Binding Path=Color.Brush_Danger1, Source={x:Static local:NbTheme.Current}}"/>
<Setter Property="MaskBackground" Value="{Binding Path=Color.Brush_Base2_OP1, Source={x:Static local:NbTheme.Current}}"/>
<Setter Property="Foreground" Value="{Binding Path=Color.Brush_Text1, Source={x:Static local:NbTheme.Current}}"/>
</Trigger>
</Style.Triggers>
</Style>
Command=x:Static shell:SystemCommands.CloseWindowCommand 重点是这句代码,调用系统关闭命令。SystemCommands主要功能是定义对于窗口管理常见的路由命令。
MaximizeWindowCommand | 获取用于最大化窗口的命令。 |
MinimizeWindowCommand | 获取用于最大化窗口的命令。 |
RestoreWindowCommand | 获取用于还原窗口的命令。 |
ShowSystemMenuCommand 获取用于显示系统菜单的命令。
NbData是图标依赖属性,加载图标资源。
TriggerProperty="IsMouseOver"Value="True"当鼠标移动按钮时,
Background=Path=Color.Brush_Danger1, Source={x:Static local:NbTheme.Current}绑定属性,该属性是深红色。
最大化和最小化原理也是调用SystemCommands.MaximizeaWindowaCommand 和SystemCommands.MinimizeaWindowaCommand来实现。
推荐一款WPF MVVM框架开源项目:Newbeecoder.UI
Newbeecoder.UI开源项目
Demo下载: