首页 > 其他分享 >WPF 自定义可拖动标题栏

WPF 自定义可拖动标题栏

时间:2022-09-28 09:59:09浏览次数:52  
标签:object sender 自定义 void 标题栏 private WindowState Maximized 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();
    }
}

 

 

标签:object,sender,自定义,void,标题栏,private,WindowState,Maximized,WPF
From: https://www.cnblogs.com/vipsoft/p/16736959.html

相关文章

  • elelment中el-cascader怎样自定义显示的lable 与value
    1、后端返回的数据类型  2、页面代码  3、重点在于 :props="{value:'id',label:'className',children:'childNode'}"  ......
  • VueJs 自定义过滤器使用总结
    在这个教程中,我们将会通过几个例子,了解和学习VueJs的过滤器。我们参考了一些比较完善的过滤器,比如orderBy和filterBy。而且我们可以链式调用过滤器,一个接一个过滤。因此,我......
  • Echarts自定义提示框案例
    官方文档:#tooltip.formatter两种方法,如trigger:'axis'的情况下,均在tooltip节点下添加如下:1.模板字符串formatter:'<spanstyle="font-size:10px">{b}</span><div......
  • java异常--自定义异常
    java异常--自定义异常步骤:创建自定义异常类。在方法中通过throw关键字抛出异常对象。处理异常try-catch捕获并处理,否则在方法声明处通过throws关键字指明抛出给......
  • django rest-framework 自定义异常捕获类
    djangorest-framework自定义异常捕获类环境:django3.2python3先创建文件exceptions.py(文件名称可以自定义)1、重写exception_handler,自定义异常类#-*-coding:ut......
  • 创建自定义UserInfo表
    models.py中fromdjango.contrib.auth.modelsimportAbstractUserfromdjango_pandas.managersimportDataFrameManager#Createyourmodelshere.classUserIn......
  • WPF 由于系统颜色配置 Mscms 组件损坏启动失败
    本文记录WPF应用程序,因为系统的颜色配置Mscms.dll组件损坏导致应用加载图片失败,从而启动失败的原因和解决方法在WPF应用加载图片时,将会调用到系统的Mscms.dll组件......
  • 在 WPF 中实现融合效果
    1.融合效果融合效果是指对两个接近的元素进行高斯模糊后再提高对比度,使它们看上去“粘”在一起。在之前的一篇文章中,我使用Win2D实现了融合效果,效果如下:不过Win2D......
  • vue3+ts项目自定义input组件
    官网讲解v-model的原理<inputv-model="searchText"/>//等同于<input:value="searchText"@input="searchText=$event.target.value"/>//当用在组件上时,v-mode......
  • WPF学习 - 动画基础
    1.WPF中的动画(Animation),是一种属性动画。技术上来说,它是让属性从一个值,变化到另一个值的过程。因此,有两条条重要的特性:1.1只能为依赖属性应用动画 1.2动画只......