WPF 自定义可拖动标题栏

简介: WPF 自定义可拖动标题栏

要注意,拖拽的地方,需要加背景色,否则 DrageMove 将无效

MainWindows.xaml

<Window  x:Class="Report.MainWindow"
                  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:views="clr-namespace:Report.Views" WindowState="Normal" WindowStyle="None" ResizeMode="NoResize" WindowStartupLocation="CenterScreen"
                  mc:Ignorable="d" d:DesignWidth="1280" d:DesignHeight="720" Width="780" Height="360">
    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <!--<ResourceDictionary Source="/VipSoft.Themes;component/Styles/MainWindow.xaml"/>-->
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>
    <Border Style="{StaticResource Layout-Border}">
        <DockPanel>
            <DockPanel LastChildFill="False" Dock="Top" Height="40" Background="#1F6AAC"   MouseLeftButtonDown="DockContainer_OnDragMove" >
                <Image Name="LoginLogoImage" Style="{StaticResource Logo-Image}"/>
                <TextBlock  Name="TitleBlock" Style="{StaticResource Layout-Title}"  Text="XX 信息管理系统"></TextBlock>
                <Button DockPanel.Dock="Right"  Style="{StaticResource Button-Close}" ToolTip="关闭"  Click="Close_OnClick"></Button>
                <ToggleButton  DockPanel.Dock="Right"  Style="{StaticResource Button-Max}" Name="TopMaxButton"  Click="MaxButton_Click" ></ToggleButton>
                <Button  DockPanel.Dock="Right" Style="{StaticResource Button-Min}" ToolTip="最小化"  Click="MinButton_Click" ></Button>
                <Button  DockPanel.Dock="Right" Style="{StaticResource Button-Top-Bar}" Content="&#xe78c;" ToolTip="帮助"></Button>
                <Button  DockPanel.Dock="Right" Style="{StaticResource Button-Top-Bar}" Content="&#xe7a3;" ToolTip="设置"></Button>
            </DockPanel>
            <DockPanel>
                <views:Navigate  Padding="5"  Background="#F1F2F3" Width="70" x:Name="NavigateMenu" MenuClick="Navigate_OnMenuClick"></views:Navigate>
                <Border BorderBrush="#D1D3D5" BorderThickness="0.9,0,0,0" Padding="2" Background="#F1F2F3" >
                    <ContentControl Name="MainContent" ></ContentControl>
                </Border>
            </DockPanel>
        </DockPanel>
    </Border>
</Window>

MainWindows.xaml.cs

private void DockContainer_OnDragMove(object sender, MouseButtonEventArgs e)
{
    switch (e.ClickCount)
    {
        // Background="White"  事件所在的容器,不加这个属性,不能拖拽
        case 1://单击
            { 
                this.DragMove();
                break;
            }
        case 2://双击
            {
                MaxButton_Click(null, null);
                TopMaxButton.IsChecked = WindowState == WindowState.Maximized;
                break;
            }
    }
}
private void MaxButton_Click(object sender, RoutedEventArgs e)
{
    WindowState = WindowState == WindowState.Maximized ? WindowState.Normal : WindowState.Maximized;
}
private void MinButton_Click(object sender, RoutedEventArgs e)
{
    WindowState = WindowState.Minimized;
}
 
private void Close_OnClick(object sender, RoutedEventArgs e)
{ 
    MessageBoxResult vr = System.Windows.MessageBox.Show("确定要退出应用吗", "操作提示",MessageBoxButton.YesNo, MessageBoxImage.Question);
    if (vr == MessageBoxResult.OK) // 如果是确定,就执行下面代码,记得换上自己的代码喔
    {
        Close();
        System.Windows.Application.Current.Shutdown();
    }
}

 

 

目录
相关文章
|
C# 虚拟化 索引
【WPF】UI虚拟化之------自定义VirtualizingWrapPanel
原文:【WPF】UI虚拟化之------自定义VirtualizingWrapPanel 前言 前几天QA报了一个关于OOM的bug,在排查的过程中发现,ListBox控件中被塞入了过多的Item,而ListBox又定义了两种样式的ItemsPanelTemplate。
2224 0
|
C# 数据安全/隐私保护
【WPF】右下角弹出自定义通知样式(Notification)——简单教程
原文:【WPF】右下角弹出自定义通知样式(Notification)——简单教程 1.先看效果 2.实现 1.主界面是MainWindow 上面就只摆放一个Button即可。
3080 1
|
4月前
|
开发框架 缓存 前端开发
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
|
4月前
|
开发框架 前端开发 JavaScript
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(3)--自定义用户控件
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(3)--自定义用户控件
|
4月前
|
开发框架 前端开发 C#
使用WPF开发自定义用户控件,以及实现相关自定义事件的处理
使用WPF开发自定义用户控件,以及实现相关自定义事件的处理
|
4月前
|
开发框架 前端开发 JavaScript
在WPF应用中使用GongSolutions.WPF.DragDrop实现列表集合控件的拖动处理
在WPF应用中使用GongSolutions.WPF.DragDrop实现列表集合控件的拖动处理
|
7月前
|
前端开发 C# 容器
浅谈WPF之控件拖拽与拖动
使用过office的visio软件画图的小伙伴都知道,画图软件分为两部分,左侧图形库,存放各种图标,右侧是一个画布,将左侧图形库的图标控件拖拽到右侧画布,就会生成一个新的控件,并且可以自由拖动。那如何在WPF程序中,实现类似的功能呢?今天就以一个简单的小例子,简述如何在WPF中实现控件的拖拽和拖动,仅供学习分享使用,如有不足之处,还请指正。
211 2
|
前端开发 C# 图形学
【WPF】WPF开发用户控件、用户控件属性依赖DependencyProperty实现双向绑定、以及自定义实现Command双向绑定功能演示
Wpf开发过程中,最经常使用的功能之一,就是用户控件(UserControl)了。用户控件可以用于开发用户自己的控件进行使用,甚至可以用于打造一套属于自己的UI框架。依赖属性(DependencyProperty)是为用户控件提供可支持双向绑定的必备技巧之一,同样用处也非常广泛。
961 0
【WPF】WPF开发用户控件、用户控件属性依赖DependencyProperty实现双向绑定、以及自定义实现Command双向绑定功能演示
|
C# C++ 数据可视化
WPF Calendar 日历控件 样式自定义
原文:WPF Calendar 日历控件 样式自定义 粗略的在代码上做了些注释 blend 生成出来的模版 有的时候 会生成 跟 vs ui界面不兼容的代码 会导致可视化设计界面 报错崩溃掉 但是确不影响 程序的编译运行 这个样式表 在vs 里会提示动画不兼容 Foreground属性 报错 ...
1792 1
|
C#
WPF 控件自定义背景
<!--控件要设置尺寸的话,设置的尺寸必须比下面的图形的尺寸要小,不然显示不开--> <Label Content="直角测试" Width="90" Height="90" HorizontalContentAlignment="Center" Vert...
1020 0