WPF 自定义窗口

  在WPF中我们经常需要抛去windows自带的窗口的样式,设定一些自定义样式的窗口,这个时候我们需要设定 WindowStyle="None" 来移除windows自带的界面样式。除此之外我们还需要设定 AllowsTransparency ="True" 来让窗口支持透明的效果。

  这里分享一个 自定义窗口的demo,该demo实现的基本功能有:

  1. 实现自定义窗口的最小化、最大化、还原、关闭功能,默认为最大化;
  2. 最小化、最大化、还原、关闭按钮在捕获鼠标之后会有动画改变图片;
  3. 双击最上面的菜单栏也能实现窗口的最大化或者还原;
  4. 支持窗口在非最大化的情况下拖动,最大化后不能拖动;
  5. 窗口的最大化不会遮罩windows系统的任务栏;

最大化、及还原的代码:

 1  if (isMaxSized)
 2                     {
 3                         this.Width = normalRect.Width;
 4                         this.Height = normalRect.Height;
 5                         this.Left = normalRect.Left;
 6                         this.Top = normalRect.Top;
 7                         this.WindowState = WindowState.Normal;
 8                         this.isMaxSized = false;
 9                         btn.Tag = "maxSize";
10                     }
11                     else
12                     {
13                         normalRect = new Rect(this.Left, this.Top, this.ActualWidth, this.ActualHeight);
14                         Rect rc = SystemParameters.WorkArea;
15                         this.Width = rc.Width;
16                         this.Height = rc.Height;
17                         this.Left = 0;
18                         this.Top = 0;
19                         this.isMaxSized = true;
20                         btn.Tag = "normalSize";
21                     }

切换图片路径的动画代码:

 1  var objKeyFrames = new ObjectAnimationUsingKeyFrames();
 2             objKeyFrames.Duration = TimeSpan.FromMilliseconds(100);
 3             objKeyFrames.KeyFrames.Add(new DiscreteObjectKeyFrame
 4             {
 5                 Value = new BitmapImage(new Uri(imgUrl, UriKind.Relative))
 6             });
 7             Storyboard story = new Storyboard();
 8             Storyboard.SetTarget(story, img);
 9             Storyboard.SetTargetProperty(story, new PropertyPath(Image.SourceProperty));
10             story.Children.Add(objKeyFrames);
11             story.Begin();

PS:

  1. 窗口的最大化不会遮罩windows系统的任务栏,这里的话我们是先获取整个屏幕的工作区域大小,然后设定窗口最大化后的宽度和高度为工作区的大小。
  2. 为了共享按钮的MouseEnter及MouseLeave事件的动画,我们没在XAML中为每个按钮写动画,而是通过后台代码来实现。

最后附上demo百度云下载地址  请猛戳这里  密码: um7m

时间: 2024-11-07 19:45:59

WPF 自定义窗口的相关文章

WPF自定义窗口基类

WPF自定义窗口基类时,窗口基类只定义.cs文件,xaml文件不定义.继承自定义窗口的类xaml文件的根节点就不再是<Window>,而是自定义窗口类名(若自定义窗口与继承者不在同一个命名空间,还得加上命名空间),继承自定义窗口类后台代码也得修改为继承自自定义窗口exp: //继承Window类的自定义窗口类 namespace WPF_Study.Entity { using System.Windows; public class WindowBase:Window { private c

WPF 自定义窗口关闭按钮

关闭图标设计主要涉及主要知识点: 1.Path,通过Path来画线.当然一般水平.竖直也是可以用Rectangle/Border之类的替代 一些简单的线条图标用Path来做,还是很方便的. 2.简单的动画,Animation用法 Button样式如下: <Button x:Name="BtnClose" Click="BtnClose_OnClick"> <Button.Template> <ControlTemplate Target

WPF中使用WindowChrome自定义窗口中遇到的最大化问题

原文:WPF中使用WindowChrome自定义窗口中遇到的最大化问题 FrameWork 4.5 之后,内置了WindowChrome类,官方文档: https://msdn.microsoft.com/en-us/library/system.windows.shell.windowchrome.aspx 如果你是旧版本,可以去搜索单独的dll. 上方的页面,解释和例子也都是旧版本的,如果新版本,比如和我一样,是4.6.2,可以继续往下看新的用法,相比文档中的旧方式,新的用法的确更简单有效了

WPF编程,使用WindowChrome实现自定义窗口功能的一种方法。

原文:WPF编程,使用WindowChrome实现自定义窗口功能的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/details/88064191 效果: 1.安装:下载地址可网上找,也可从最后的地址 2.增加引用 3.增加命名空间 ? ? ? ? xmlns:shell="clr-namespace:Microsoft.Windows.Shell;assembly=Microsoft.Windows.

WPF自定义样式篇-DataGrid

WPF自定义样式篇-DataGrid 先上效果图: 样式: <!--DataGrid样式-->    <Style TargetType="DataGrid">        <Setter Property="RowHeaderWidth" Value="0"></Setter>        <Setter Property="AutoGenerateColumns"

WPF自定义路由事件

一 概要 本文通过实例演示WPF自定义路由事件的使用,进而探讨了路由事件与普通的CLR事件的区别(注:"普通的CLR事件"这个说法可能不太专业,但是,我暂时也找不到什么更好的称呼,就这么着吧,呵呵.)(扩展阅读:例说.NET事件的使用). 二 实例演示与说明 1 新建DetailReportEventArgs类,该类派生自RoutedEventArgs类,RoutedEventArgs类包含与路由事件相关的状态信息和事件数据.DetailReportEventArgs类中定义了属性Ev

WPF 自定义柱状图 BarChart

WPF 自定义柱状图 1. <UserControl x:Class="WpfApplication11.BarChartControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.o

QT笔记之自定义窗口拖拽移动

1.QT自定义标题栏,拖拽标题栏移动窗口(只能拖拽标题,其他位置无法拖拽) 方法一: 转载:http://blog.sina.com.cn/s/blog_4ba5b45e0102e83h.html .h文件中 1 //自己重新实现拖动操作 2 protected: 3 4 void mouseMoveEvent ( QMouseEvent * event ); 5 6 void mousePressEvent ( QMouseEvent * event ); 7 8 void mouseRele

QT自定义窗口(模拟MainWindow)

在这里自定义窗口是通过继承于QFrame,内部分为上下两部分,上半部分就是标题栏,下面是窗口的具体内容.上下两部分通过布局固定位置.最后窗口的各种鼠标拖动,缩放,等操作通过添加鼠标事件来完成一个窗口的常规功能.当然,这个标题栏可以通过布局的改变把它放到任意地方. 下面是实现的代码: #pragma once #ifndef CUSTOMWIDGET_H_ #define CUSTOMWIDGET_H_ #include <QtWidgets/QFrame> class QToolButton;