WPF UI开发教程自定义窗体最小化、最大化、关闭按钮

92 篇文章 9 订阅
92 篇文章 24 订阅

在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主要功能是定义对于窗口管理常见的路由命令。

CloseaWindowaCommand

MaximizeaWindowaCommand

MaximizeWindowCommand获取用于最大化窗口的命令。

MinimizeaWindowaCommand

MinimizeWindowCommand获取用于最大化窗口的命令。

RestoreaWindowaCommand

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下载:

Newbeecoder.UI开源项目icon-default.png?t=M3K6https://share.weiyun.com/py6W1dcK

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值