wpf 自定义窗口,最大化时不覆盖任务栏
相信很多人使用wpf时会选择自定义美观的窗口,因此会设置WindowStyle="None" 取消自带的标题栏。但这样使用 WindowState="Maximized" 或者后台 this.WindowState = System.Windows.WindowState.Maximized; 最大化窗口会覆盖掉系统任务栏,即全屏了。这其实并不是个很好的体验。
在网上找答案,排名靠前的都是提供用hook钩子,篇幅很长,如:http://www.cnblogs.com/zhouyinhui/archive/2008/11/04/1326188.html
个人感觉这么一个小功能添加那么多的代码是不人性的,于是继续寻找,终于看到黎明的曙光:
Rect rcnormal;//定义一个全局rect记录还原状态下窗口的位置和大小。
/// <summary>
/// 最大化
/// </summary>
private void btnMaximize_Click(object sender, RoutedEventArgs e)
{
this.btnMaximize.Visibility = Visibility.Collapsed;
this.btnNormal.Visibility = Visibility.Visible;
rcnormal = new Rect(this.Left, this.Top, this.Width, this.Height);//保存下当前位置与大小
this.Left = ;//设置位置
this.Top = ;
Rect rc = SystemParameters.WorkArea;//获取工作区大小
this.Width = rc.Width;
this.Height = rc.Height;
}
/// <summary>
/// 还原
/// </summary>
private void btnNormal_Click(object sender, RoutedEventArgs e)
{
this.Left = rcnormal.Left;
this.Top = rcnormal.Top;
this.Width = rcnormal.Width;
this.Height = rcnormal.Height;
this.btnMaximize.Visibility = Visibility.Visible;
this.btnNormal.Visibility = Visibility.Collapsed;
}
好了,最大化和最小化事件自定义好了。嗯,功能应该够了吧??其实还不够,让我们想想,平时我们拖动窗口的时候,如果窗口拖动到顶端鼠标出界的话窗口将会最大化是不是?在wpf中 WindowStyle="None" 下也还是全屏效果,而且会覆盖掉我们自定义的效果,你可以试一下,这个时候你的this.width和this.height都无用了。
那该怎么办呢?看下边:
在前台添加:
SizeChanged="Window_SizeChanged"
后台:
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
if (this.ActualHeight > SystemParameters.WorkArea.Height || this.ActualWidth > SystemParameters.WorkArea.Width)
{
this.WindowState = System.Windows.WindowState.Normal;
btnMaximize_Click(null, null);
}
}
ok,搞定!
这么简单的代码,相信大家看的懂吧~~
另附双击标题栏事件:
private void Grid_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount == )
{
if (this.ActualWidth == SystemParameters.WorkArea.Width)
{
btnNormal_Click(null, null);
}
else
{
btnMaximize_Click(null, null);
}
}
}
转载请写明出处:http://www.cnblogs.com/jying/p/3180194.html
wpf 自定义窗口,最大化时不覆盖任务栏的更多相关文章
- WPF自定义窗口最大化显示任务栏
原文:WPF自定义窗口最大化显示任务栏 当我们要自定义WPF窗口样式时,通常是采用设计窗口的属性 WindowStyle="None" ,然后为窗口自定义放大,缩小,关闭按钮的样式 ...
- wpf 自定义窗口,最大化时覆盖任务栏解决方案
原文:wpf 自定义窗口,最大化时覆盖任务栏解决方案 相信很多人使用wpf时会选择自定义美观的窗口,因此会设置WindowStyle="None" 取消自带的标题栏.但这样使用 W ...
- [WPF疑难]避免窗口最大化时遮盖任务栏
原文 [WPF疑难]避免窗口最大化时遮盖任务栏 [WPF疑难]避免窗口最大化时遮盖任务栏 周银辉 WPF窗口最大化时有个很不好的现象是:如果窗口的WindowStyle被直接或间接地设置为None后( ...
- WPF自学入门(九)WPF自定义窗口基类
今天简单记录一个知识点:WPF自定义窗口基类,常用winform的人知道,winform的窗体继承是很好用的,写一个基础窗体,直接在后台代码改写继承窗体名.但如果是WPF要继承窗体,我个人感觉没有理解 ...
- WPF自定义窗口基类
WPF自定义窗口基类时,窗口基类只定义.cs文件,xaml文件不定义.继承自定义窗口的类xaml文件的根节点就不再是<Window>,而是自定义窗口类名(若自定义窗口与继承者不在同一个命名 ...
- 【转】【WPF】WPF 登录窗口关闭时打开主窗口
在WPF中设计登录窗口关闭时打开主窗口,自动生成的App.xaml不能满足要求, 1.把App.xaml的属性窗口中的生成操作设定为 无 2.添加Program类 static class Progr ...
- WPF 自定义窗口
在WPF中,经常需要对窗口进行设置,下面讲讲常用的几个设置. 1.无边框窗口 WindowStyle="None" 窗口样式无 AllowsTransparency="T ...
- WPF 自定义窗口标题栏
1.建一个WPF资源词典,在其中定义窗口样式,并在App.xaml中指定其为程序资源 2.写一个继续自windows的类,并指定这个类的Style为第一步资源里的样式 3.新建窗口时,分别把xaml文 ...
- WPF自定义窗口(Windows Server 2012 Style)
先上图 新建CustomControl,名:HeaderedWindow Themes\Generic.aml文件夹下加入 笔刷,转换器 <SolidColorBrush x:Key=" ...
随机推荐
- notifyDataSetInvalidated()跟notifyDataSetChanged()的区别
public void notifyDataSetChanged(): 通过一个外部的方法控制,如果适配器的内容改变了,那么就会强制调用getView来刷新每个Item的内容.这个方法内部实现了在每个 ...
- 网页闯关游戏(riddle webgame)--SQL注入的潘多拉魔盒
前言: 之前编写了一个网页闯关游戏(类似Riddle Game), 除了希望大家能够体验一下我的游戏外. 也愿意分享编写这个网页游戏过程中, 学到的一些知识. web开发初学者往往会忽视一些常见的漏洞 ...
- [读书笔记]java中的类加载器
以下内容大多来自周志明的<深入理解Java虚拟机>. 类加载器是java的一项创新,也是java流行的重要原因之一,它最初是为了满足java applet的需求而开发出来. 什么是appl ...
- cocos2d 艺术标签没有显示
今天自己挖了个坑,设置数字标签的时候,无论怎么搞,程序运行后还是显示的是普通文本数字,各种原因找了一半天,最后发现在资源名字.png的前面多了一个空格,眼瞎一直没看到,最后去掉就OK了
- hdu2191 悼念512汶川大地震 ——多重背包
link:http://acm.hdu.edu.cn/showproblem.php?pid=2191 最简单的那种 #include <iostream> #include <cs ...
- C#中动态读写App.config配置文件
转自:http://blog.csdn.net/taoyinzhou/article/details/1906996 app.config 修改后,如果使用cofnigurationManager立即 ...
- html+css图片下弹出蒙版
鼠标移入时弹出蒙版!!! html<!DOCTYPE html<html lang="en"<head> <meta charset="UT ...
- 使用as3控制动画的播放与暂停
1.需要两个按钮元件 2.在属性面板为两个按钮元件分别命名为pausebutton与playButton 3.代码 stop(); pausebutton.visible = false; playB ...
- Mysql分区简述
1. 数据量大的时候 mysql分表非常常用,但是mysql还可以分区. 2. 分区就是把同一张表放在不同的磁盘文件上, 当查询的时候首先定位是哪个分区(查询的时候一定要用到分区的key) 3. 分区 ...
- ABBYY FineReader自定义工作区的方法
ABBYY FineReader作为一款OCR图文识别软件,界面具有用户友好性和直观性,以结果为导向,可以在不进行任何其他培训的情况下使用该程序,新用户可以迅速掌握主要功能,轻松自定义程序的界面,接下 ...