在WPF中自定义窗体标题栏,首先需要将窗体的WindowStyle属性设置为None,隐藏掉WPF窗体的自带标题栏。然后可以在窗体内部自定义一个标题栏。

  例如,标题栏如下:

        <WrapPanel Height="30" MouseMove="TitleBar_MouseMove" MouseDown="TitleBar_MouseDown" Background="#4C9CFB" DockPanel.Dock="Top">
<TextBlock Name="txtTitle" Margin="1,0,0,0" Padding="5,3,2,3" Text="个人信息"
HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="14" FontFamily="微软雅黑"
Foreground="White"/>
<custom:ImageButton x:Name="btn_min" Template="{StaticResource ImageButton_Template}" Margin="560,5,0,0"
Source="../res/img/btn_min1.jpg" ImgWidth="14" ImgHeight="14" Click="btn_min_Click" Grid.Column="0"/>
<custom:ImageButton x:Name="btn_max" Template="{StaticResource ImageButton_Template}" Margin="30,5,0,0"
Source="../res/img/btn_close1.jpg" ImgWidth="14" ImgHeight="14" Click="btn_close_Click">
</custom:ImageButton>
</WrapPanel>

  在后台,为TitleBar添加了MouseMove事件,后台处理代码:

  #region 标题栏事件

        /// <summary>
/// 窗口移动事件
/// </summary>
private void TitleBar_MouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
{
this.DragMove();
}
}

int i = ;
/// <summary>
/// 标题栏双击事件
/// </summary>
private void TitleBar_MouseDown(object sender, MouseButtonEventArgs e)
{
i += ;
System.Windows.Threading.DispatcherTimer timer = new System.Windows.Threading.DispatcherTimer();
timer.Interval = new TimeSpan(, , , , );
timer.Tick += (s, e1) => { timer.IsEnabled = false; i = ; };
timer.IsEnabled = true;

if (i % == )
{
timer.IsEnabled = false;
i = ;
this.WindowState = this.WindowState == WindowState.Maximized ?
WindowState.Normal : WindowState.Maximized;
}
}

/// <summary>
/// 窗口最小化
/// </summary>
private void btn_min_Click(object sender, RoutedEventArgs e)
{
this.WindowState = WindowState.Minimized; //设置窗口最小化
} /// <summary>
/// 窗口最大化与还原
/// </summary>
private void btn_max_Click(object sender, RoutedEventArgs e)
{
if (this.WindowState == WindowState.Maximized)
{
this.WindowState = WindowState.Normal; //设置窗口还原
}
else
{
this.WindowState = WindowState.Maximized; //设置窗口最大化
}
} /// <summary>
/// 窗口关闭
/// </summary>
private void btn_close_Click(object sender, RoutedEventArgs e)
{
this.Close();
} #endregion 标题栏事件

WPF 之 自定义窗体标题栏的更多相关文章

  1. WPF 创建自定义窗体

    在前面的一篇博客"WPF 自定义Metro Style窗体",展示了如何创建一个类似于Metro Style的Window,并在程序中使用.但是这个窗体不能够自由的改变大小.今天的 ...

  2. WPF设计の自定义窗体

    效果图如下: 实现思路: 1.继承Window类 2.为自定义的CustomWindow类设计窗体样式(使用Blend很方便!) 3.为窗体增加最大最小化和关闭按钮,并实现鼠标拖拽改变窗体大小(使用D ...

  3. WPF中自定义标题栏时窗体最大化处理之WindowChrome

    注意: 本文方法基础是WindowChrome,而WindowChrome在.NET Framework 4.5之后才集成发布的.见:WindowChrome Class 在.NET Framewor ...

  4. WPF自定义控件与样式(13)-自定义窗体Window & 自适应内容大小消息框MessageBox

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: 自定义 ...

  5. 【转】WPF自定义控件与样式(13)-自定义窗体Window & 自适应内容大小消息框MessageBox

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等. 本文主要内容: 自定义Window窗体样式: 基于自定义窗体实现自定义MessageB ...

  6. Winform自定义窗体样式,实现标题栏可灵活自定义

    最近在编写C/S结构应用程序时,感觉窗体的标题栏样式太死板了,标题文字不能更改大小.颜色.字体等,按钮不能隐藏等问题,在网上也查找了许多相关的资料,没有找到合适的解决方案,发现许多人也在寻求这个问题, ...

  7. paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制

    源地址:http://blog.csdn.net/attilax/article/details/12343625 paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制 效果图: ...

  8. WPF移动Window窗体(鼠标点击左键移动窗体自定义行为)

    XAML代码部分:1.引用System.Windows.Interactivity 2.为指定的控件添加一个拖动的行为 3.很简单的了解行为的作用和用法 <Window xmlns=" ...

  9. WPF修改窗体标题栏的颜色

    WPF程序通常情况下没办法修改窗体标题栏的样式,包括标题栏的背景颜色. 不过借助一个叫Fluent.Ribbon的第三方控件,貌似可以修改标题栏的背景颜色. 可以通过NuGet来安装这个控件:Inst ...

随机推荐

  1. Bezier曲线的原理 及 二次Bezier曲线的实现

    原文地址:http://blog.csdn.net/jimi36/article/details/7792103 Bezier曲线的原理 Bezier曲线是应用于二维图形的曲线.曲线由顶点和控制点组成 ...

  2. LC并联谐振回路

  3. hdu 5400 Arithmetic Sequence

    http://acm.hdu.edu.cn/showproblem.php?pid=5400 Arithmetic Sequence Time Limit: 4000/2000 MS (Java/Ot ...

  4. 最精简的IOCP封装

    最精简的IOCP封装,DELPHI XE8直接编译通过.Winsock2.pas即使用DELPHI自带的,相信XE7也能编译,或者XE6,XE5也能. 单说Winsock2.pas,我见过无数种版本的 ...

  5. commondline 之三 执行jar文件

    java [-options] -jar jarfile [args...] 点击查看获取可执行jar文件方法

  6. Top 7 Myths about HTTPS

    Myth #7 – HTTPS Never Caches People often claim that HTTPS content is never cached by the browser; p ...

  7. sqlservice 查询该字段的值是否为数字、不包含a-z字母、获取中文的首字母

    select zjm from xskh where guid_yw='e6ee44f3-98ab-4446-bd9b-db2e525d3b24' and zjm not like  '%[ABCDE ...

  8. APP接口版本兼容的问题

    现在基本每个公司都做APP,所以大家都面临 APP接口版本兼容的问题. iOS和android 要不断开发新版本,很多服务端开发都是在以前接口的逻辑上进行修改.新的APP和接口开发后,接口如何兼容老的 ...

  9. ASP.NET|跳转(redirect)到其它站点,提示:当前线程终止。

    在XAF中,如果使用HttpContext.Response.Redirect()进行跳转,会出现”当前线程终止“的报错,跳转失败. 这时候,应该改用WebApplication.Redirect() ...

  10. 以静态变量保存 Spring ApplicationContext

    package com.thinkgem.jeesite.common.utils; import java.net.HttpURLConnection; import java.net.URL; i ...