博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF窗口继承实现统一风格的自定义窗口
阅读量:5275 次
发布时间:2019-06-14

本文共 3773 字,大约阅读时间需要 12 分钟。

如何实现一个窗口的风格(style),让所有的窗口都继承这样同样的风格,包括标题栏,放大、缩小和关闭按钮。

 那么,我们可不可以就建立一个Base窗口,然后将这个窗口的风格给设计好之后,所有的窗口都继承自他呢?

答案是否定的,我们一定要知道,窗口是一个类,它可以继承,但是风格(XAML)文件是继承不了的。

所以我们能够做到的是:

1、窗口类继承,BaseWindow封装窗口最大化按钮,最小化按钮的点击等事件。

2、风格(Style)就利用属性来设置,把window看成一个控件,利用Style=“BaseWindowStyle”就可以了。

以下是详细的步骤:

1、新建一个BaseWindowStyle的模板文件。点击项目名称,右键“添加”->”资源字典”->输入名称为“BaseWindowStyle.xaml”,然后将以下的末班文件拷贝进去:

 

2、引用该模板文件。资源文件建立后,我们需要在程序中引用这个文件,打开APP.XAML,将引用的BaseWindowStyle添加进去:

3、建立BaseWindow类,实现窗口点击,拖动等事件。在工程上点击右键“添加”->“类”->输入”BaseWindow.cs“

该类继承自Window,然后要载入模板文件,在模板文件中获取最小化、最大化等按钮,然后将这些按钮的点击事件和窗口绑定起来,实现窗口的响应:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Input;namespace MyFirst{    public class BaseWindow : Window    {        public BaseWindow()        {            InitializeStyle();            this.Loaded += delegate            {                InitializeEvent();            };        }        private void InitializeEvent()        {            ControlTemplate baseWindowTemplate = (ControlTemplate)App.Current.Resources["BaseWindowControlTemplate"];            Button minBtn = (Button)baseWindowTemplate.FindName("btnMin", this);            minBtn.Click += delegate            {                           this.WindowState = WindowState.Minimized;            };            Button maxBtn = (Button)baseWindowTemplate.FindName("btnMax", this);            maxBtn.Click += delegate            {                               this.WindowState = (this.WindowState == WindowState.Normal ? WindowState.Maximized : WindowState.Normal);            };            Button closeBtn = (Button)baseWindowTemplate.FindName("btnClose", this);            closeBtn.Click += delegate            {                this.Close();            };            Border borderTitle = (Border)baseWindowTemplate.FindName("borderTitle", this);            borderTitle.MouseMove += delegate(object sender, MouseEventArgs e)            {                if (e.LeftButton == MouseButtonState.Pressed)                {                    this.DragMove();                }            };            borderTitle.MouseLeftButtonDown += delegate(object sender, MouseButtonEventArgs e)            {                if (e.ClickCount >= 2)                {                    maxBtn.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));                }            };        }        private void InitializeStyle()        {            this.Style = (Style)App.Current.Resources["BaseWindowStyle"];        }    }}

 

4,其它窗口类继承自BaseWindow:

public partial class MainWindow : BaseWindow

5,其它窗口的风格指向BaseWindowStyle。

这里要注意一点Winodow的风格可不是直接 Style=”BaseWindowStyle” 那么简单,可以看看MainWindow.xaml的代码:

 

经过这么多步,我们终于实现了凡是继承自BaseWindow的窗口,都有统一的风格了!

当然,如上的窗口还不是那么漂亮完美,但是相信你有办法把它做的美美的!

转载于:https://www.cnblogs.com/DreamRecorder/p/9662081.html

你可能感兴趣的文章
研究称90%的癌症由非健康生活习惯导致
查看>>
命令行启动Win7系统操作部分功能
查看>>
排序sort (一)
查看>>
Parrot虚拟机
查看>>
Teamcenter10 step-by-step installation in Linux env-Oracle Server Patch
查看>>
Struts2学习(三)
查看>>
Callable和Runnable和FutureTask
查看>>
GitHub 多人协作开发 三种方式:
查看>>
文本域添加编辑器
查看>>
Yum安装MySQL以及相关目录路径和修改目录
查看>>
java获取hostIp和hostName
查看>>
关于web服务器和数据库的各种说法(搜集到的)
查看>>
《TCP/IP 详解 卷一》读书笔记 -----第四章 ARP
查看>>
C# Stream 和 byte[] 之间的转换
查看>>
OMG: daily scrum nine
查看>>
redis与spring结合错误情况
查看>>
第六章 字节码执行方式--解释执行和JIT
查看>>
实现绘制图形的ToolBar
查看>>
C# 串口接收数据中serialPort.close()死锁
查看>>
字符串方法title()、istitle()
查看>>