运行效果:
项目目录:
<UserControl x:Class="YCApplication.CloseButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d" d:DesignHeight="20" d:DesignWidth="20"
Background="Transparent" DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
<Grid.Resources>
<ControlTemplate x:Key="CloseButtonTemplate" TargetType="{x:Type Button}">
<Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{Binding BackgroundColor}" CornerRadius="{Binding BorderCornerRadius}">
<Grid>
<ContentPresenter x:Name="contentPresenter" IsHitTestVisible="True" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
<Path Name="path" Margin="{Binding CloseMargin}" IsHitTestVisible="False" Data="M50,25 L25,50 M25,25 50,50" Stretch="Fill" Fill="{Binding CloseBackground}" Stroke="{Binding CloseBackground}" StrokeThickness="{Binding CloseThickness}" RenderTransformOrigin="0.5,0.5" HorizontalAlignment="Center" VerticalAlignment="Center">
<Path.RenderTransform>
<RotateTransform x:Name="trans" Angle="0"/>
</Path.RenderTransform>
</Path>
</Grid>
</Border>
<ControlTemplate.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace YCApplication
{
/// <summary>
/// CloseButton.xaml 的交互逻辑
/// </summary>
public partial class CloseButton : UserControl
{
public CloseButton()
{
InitializeComponent();
}
/// <summary>
/// 叉叉颜色依赖属性
/// </summary>
private static readonly DependencyProperty CloseBackgroundProperty =
DependencyProperty.Register("CloseBackground", typeof(Brush), typeof(CloseButton), new PropertyMetadata(new SolidColorBrush(Colors.White)));
/// <summary>
/// 叉叉厚度依赖属性
/// </summary>
private static readonly DependencyProperty CloseThicknessProperty =
DependencyProperty.Register("CloseThickness", typeof(double), typeof(CloseButton), new PropertyMetadata(4.0));
/// <summary>
/// 叉叉厚度依赖属性
/// </summary>
private static readonly DependencyProperty CloseMarginProperty =
DependencyProperty.Register("CloseMargin", typeof(Thickness), typeof(CloseButton), new PropertyMetadata(new Thickness(0)));
/// <summary>
/// 背景色
/// </summary>
public static DependencyProperty BackgroundColorProperty =
DependencyProperty.Register("BackgroundColor", typeof(Brush), typeof(CloseButton));
/// <summary>
/// 外边框角
/// </summary>
public static DependencyProperty BorderCornerRadiusProperty =
DependencyProperty.Register("BorderCornerRadius", typeof(CornerRadius), typeof(CloseButton));
public Brush
<Window x:Class="YCApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:YCApplication"
Title="MainWindow" Height="350" Width="525" WindowStyle="None" WindowState="Normal" ResizeMode="CanResizeWithGrip" AllowsTransparency="True"
MinWidth="1300" MinHeight="748" BorderThickness="10" WindowStartupLocation="CenterScreen" SnapsToDevicePixels="True">
<Grid>
<StackPanel>
<local:TopArea Height="50" MouseLeftButtonDown="topArea_MouseLeftButtonDown" MinimizeButton_Click="MinimizeButtonClick" MaximizeButton_Click="MaximizeButtonClick" MouseDoubleClick="topArea_MouseDoubleClick"/>
</StackPanel>
</Grid>
</Window>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace YCApplication
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
/// <summary>
/// 主窗口移动
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void topArea_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
try
{
if (e.ButtonState == MouseButtonState.Pressed)
{
this.DragMove();
}
}
catch { }
}
/// <summary>
/// 最小化点击
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MinimizeButtonClick(object sender, RoutedEventArgs e)
{
if (this.WindowState == System.Windows.WindowState.Normal || this.WindowState == System.Windows.WindowState.Maximized)
{
this.WindowState = System.Windows.WindowState.Minimized;
}
else
{
this.WindowState = System.Windows.WindowState.Normal;
}
}
/// <summary>
/// 最大化点击
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MaximizeButtonClick(object sender, RoutedEventArgs e)
{
maxWindow();
}
/// <summary>
<UserControl x:Class="YCApplication.MaximizeButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d" d:DesignHeight="20" d:DesignWidth="20"
Background="Transparent" DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
<Grid.Resources>
<ControlTemplate x:Key="CloseButtonTemplate" TargetType="{x:Type Button}">
<Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{Binding BackgroundColor}" CornerRadius="{Binding BorderCornerRadius}">
<Grid>
<ContentPresenter x:Name="contentPresenter" IsHitTestVisible="True" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
<Path Name="path" Margin="{Binding MaximizeMargin}" IsHitTestVisible="False" Data="M0,0 L100,0 100,90 0,90Z" Stretch="Fill" Stroke="{Binding MaximizeBackground}" StrokeThickness="{Binding MaximizeThickness}" RenderTransformOrigin="0.5,0.5" HorizontalAlignment="Center" VerticalAlignment="Center">
<Path.RenderTransform>
<RotateTransform x:Name="trans" Angle="0"/>
</Path.RenderTransform>
</Path>
</Grid>
</Border>
<ControlTemplate.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<BeginStoryboard >
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace YCApplication
{
/// <summary>
/// MaximizeButton.xaml 的交互逻辑
/// </summary>
public partial class MaximizeButton : UserControl
{
public MaximizeButton()
{
InitializeComponent();
}
/// <summary>
/// 方框颜色依赖属性
/// </summary>
private static readonly DependencyProperty MaximizeBackgroundProperty =
DependencyProperty.Register("MaximizeBackground", typeof(Brush), typeof(MaximizeButton), new PropertyMetadata(new SolidColorBrush(Colors.White)));
/// <summary>
/// 方框厚度依赖属性
/// </summary>
private static readonly DependencyProperty MaximizeThicknessProperty =
DependencyProperty.Register("MaximizeThickness", typeof(double), typeof(MaximizeButton), new PropertyMetadata(2.0));
/// <summary>
/// 方框厚度依赖属性
/// </summary>
private static readonly DependencyProperty MaximizeMarginProperty =
DependencyProperty.Register("MaximizeMargin", typeof(Thickness), typeof(MaximizeButton), new PropertyMetadata(new Thickness(3)));
/// <summary>
/// 外边框角
/// </summary>
public static DependencyProperty BorderCornerRadiusProperty =
DependencyProperty.Register("BorderCornerRadius", typeof(CornerRadius), typeof(MaximizeButton));
/// <summary>
/// 背景色
/// </summary>
public static DependencyProperty BackgroundColorProperty =
DependencyProperty.Register("BackgroundColor", typeof(Brush), typeof(
<UserControl x:Class="YCApplication.MinimizeButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="20" d:DesignWidth="20"
Background="Transparent" DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
<Grid.Resources>
<ControlTemplate x:Key="CloseButtonTemplate" TargetType="{x:Type Button}">
<Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{Binding BackgroundColor}" CornerRadius="{Binding BorderCornerRadius}">
<Grid>
<ContentPresenter x:Name="contentPresenter" IsHitTestVisible="True" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
<Path Name="path" Margin="{Binding MinimizeMargin}" IsHitTestVisible="False" Data="M0,0 L100,0" Stretch="Fill" Stroke="{Binding MinimizeBackground}" StrokeThickness="{Binding MinimizeThickness}" RenderTransformOrigin="0.5,0.5" HorizontalAlignment="Center" VerticalAlignment="Center">
<Path.RenderTransform>
<RotateTransform x:Name="trans" Angle="0"/>
</Path.RenderTransform>
</Path>
</Grid>
</Border>
<ControlTemplate.Triggers>
<!--部件旋转动画效果-->
<EventTrigger RoutedEvent="MouseEnter">
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace YCApplication
{
/// <summary>
/// MinimizeButton.xaml 的交互逻辑
/// </summary>
public partial class MinimizeButton : UserControl
{
public MinimizeButton()
{
InitializeComponent();
}
/// <summary>
/// 方框颜色依赖属性
/// </summary>
private static readonly DependencyProperty MinimizeBackgroundProperty =
DependencyProperty.Register("MinimizeBackground", typeof(Brush), typeof(MinimizeButton), new PropertyMetadata(new SolidColorBrush(Colors.White)));
/// <summary>
/// 方框厚度依赖属性
/// </summary>
private static readonly DependencyProperty MinimizeThicknessProperty =
DependencyProperty.Register("MinimizeThickness", typeof(double), typeof(MinimizeButton), new PropertyMetadata(2.0));
/// <summary>
/// 方框厚度依赖属性
/// </summary>
private static readonly DependencyProperty MinimizeMarginProperty =
DependencyProperty.Register("MinimizeMargin", typeof(Thickness), typeof(MinimizeButton), new PropertyMetadata(new Thickness(3,4,3,4)));
/// <summary>
/// 外边框角
/// </summary>
public static DependencyProperty BorderCornerRadiusProperty =
DependencyProperty.Register("BorderCornerRadius", typeof(CornerRadius), typeof(MinimizeButton));
/// <summary>
/// 背景色
/// </summary>
public static DependencyProperty BackgroundColorProperty =
DependencyProperty.Register("BackgroundColor", typeof(Brush), t
<UserControl x:Class="YCApplication.TopArea"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:YCApplication"
mc:Ignorable="d"
d:DesignHeight="60" d:DesignWidth="1280">
<!--渐变色效果背景-->
<UserControl.Background>
<LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
<GradientStop Color="#5797e8" Offset="0"/>
<GradientStop Color="#4dc0f0" Offset="1"/>
</LinearGradientBrush>
</UserControl.Background>
<Grid>
<StackPanel Panel.ZIndex="10" VerticalAlignment="Top" HorizontalAlignment="Right" Orientation="Horizontal">
<local:MinimizeButton Grid.Row="0" Panel.ZIndex="10" Height="28" Width="28" Margin="0,4,4,0" VerticalAlignment="Top" HorizontalAlignment="Right" Cursor="Hand" BackgroundColor="Transparent" MinimizeThickness="3" MinimizeMargin="5" MinimizeButton_Click="MinimizeButtonClick"/>
<local:MaximizeButton Grid.Row="0" Panel.ZIndex="10" Height="28" Width="28" Margin="0,4,4,0" VerticalAlignment="Top" HorizontalAlignment="Right" Cursor="Hand" BackgroundColor="Transparent" MaximizeThickness="3" MaximizeMargin="5" MaximizeButton_Click="MaximizeButtonClick"/>
<local:CloseButton x:Name="cbButton" Grid.Row="0" Panel.ZIndex="10" Height="28" Width="28" Margin="0,4,4,0" VerticalAlignment="Top" HorizontalAlignment="Right" Cursor="Hand" BackgroundColor="#37aae9" BorderCornerRadius="5" CloseThickness="3" CloseMargin="5" MouseEnter="CloseButton_MouseEnter" MouseLeave="CloseButton_MouseLeave" CloseButton_Click="CloseButtonClick"/>
</StackPanel>
</Grid>
</UserControl>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace YCApplication
{
/// <summary>
/// TopArea.xaml 的交互逻辑
/// </summary>
public partial class TopArea : UserControl
{
public TopArea()
{
InitializeComponent();
}
/// <summary>
/// 最小化事件
/// </summary>
public event MinimizeButtonClickHandler MinimizeButton_Click;
/// <summary>
/// 最大化事件
/// </summary>
public event MaximizeButtonClickHandler MaximizeButton_Click;
/// <summary>
/// 最小化窗体
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MinimizeButtonClick(object sender, RoutedEventArgs e)
{
//触发最小化事件
MinimizeButton_Click(sender, e);
}
/// <summary>
/// 最大化窗体
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MaximizeButtonClick(object sender, RoutedEventArgs e)
{
//触发小大化事件
MaximizeButton_Click(sender, e);
}
/// <summary>
/// 鼠标进入关闭按钮,背景色改变
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CloseButton_MouseLeave(object sender, MouseEventArgs e)
{
cbButton.BackgroundColor = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#37aae9"));
}
/// <summary>
/// 关闭窗体
/// </summary>
/// <param name="sende