今天简单记录一个知识点:WPF自定义窗口基类,常用winform的人知道,winform的窗体继承是很好用的,写一个基础窗体,直接在后台代码改写继承窗体名。...但如果是WPF要继承窗体,我个人感觉没有理解之前:好难,不懂怎么处理还是不可以继承;但理解之后就是很简单了。...第一次尝试使用WPF直接修改后台代码继承自定义窗体SEWindow后就会报错如下: ?...经过一段时间查看WPF相关数据资料,可按如下方法创建继承自 Window 基类的自定义窗口基类。...二、使用Window的基类 创建窗口类,后台类改为继承自定义的 窗体基类。
前言 窗口置顶有两种情况 应用内的窗口置顶 应用外的窗口置顶 一般我们这样设置窗口置顶 但是如果其他程序也置顶,后来的置顶就会覆盖之前的置顶...: Window.Deactivated在窗口成为后台窗口时发生。...停用窗口后 (成为后台窗口) : 用户切换到当前应用程序中的另一个窗口。 用户使用 ALT + TAB 或使用任务管理器切换到另一个应用程序中的窗口。 用户单击另一应用程序中窗口的任务栏按钮。...= 7; /// /// 以窗口原来的状态显示窗口。...如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。
本文告诉大家如何在 WPF 做一个全屏的透明窗口,和全屏透明窗口的坑 使用下面代码就可以作出全屏透明窗口 public MainWindow() {...WindowState.Maximized; Background = Brushes.Transparent; Topmost = true; } 在 WPF...透明窗口会加上背景放到内存,尝试将上面程序在 2K 屏幕运行,将会看到大概需要 70M 内存。...如果屏幕分辨率更大,将会发现鼠标移动很慢,请看 【翻译】关于 WPF 透明窗口的内存占用 另外会发现窗口其实和屏幕有一个像素,通过设置 ResizeMode="NoResize" 可以解决,因为这一个像素是用来拖动窗口...此外,设置 ResizeMode="NoResize" 可以解决: 17025 触摸bug 还原窗口再最大化,窗口出现偏移 切换屏幕,窗口出现偏移
可以考虑直接将 WPF 窗口嵌入到 MFC 窗口中,以下是探索过程中的一些记录。...为了避免初始化 WPF 窗口时,在系统任务栏上闪现 WPF 窗口的标题,可以在 WPF 中设置 ShowInTaskbar="False" #include "CHostWPFWnd.h"#include...MFC 的窗口和控件,有青色背景的是 WPF 嵌入到 MFC 中的窗口。...Library 通过上面的代码,其实可以看到,将 WPF 窗口嵌入到 MFC 中,重点就是拿到 WPF 窗口的句柄,然后使用 Windows API 就可以将窗口嵌入了...),调用上述方法,获取到 WPF 窗口的句柄,就可以嵌入到 MFC 窗口中了。
如果不用到 Win32 方法,可以尝试遍历所有窗口获取 Owner 判断,不过此方法仅仅适合只有一个主线程 通过 Win32 的 EnumChildWindows 可以拿到某个窗口句柄的所有子窗口,大概用法如下...) gcChildhandlesList.Target; childHandles.Add(hWnd); return true; } } 使用方法是先拿到窗口的句柄...,然后传入 GetAllChildHandles 方法,就可以拿到所有子窗口的句柄 var windowInteropHelper = new WindowInteropHelper...PINVOKE: Getting all child handles of window · Software adventures and thoughts 使用 EnumWindows 找到满足你要求的窗口
本文告诉大家如何隐藏系统窗口菜单 系统的窗口菜单请看下图 通过在消息里面钩调一些消息的方式,此方法由 黄滨滨 大佬提供 private IntPtr Hook(IntPtr hwnd,
目录 WPF的消息机制(一)-让应用程序动起来 WPF的消息机制(二)-WPF内部的5个窗口 (1)隐藏消息窗口 (2)处理激活和关闭的消息的窗口和系统资源通知窗口 (3)用于用户交互的可见窗口 (4)...用于UI窗口绘制的可见窗口 WPF的消息机制(三)-WPF输入事件的来源 WPF的消息机制(四)-WPF中UI的更新 WPF内部的5个窗口 对于Windows系统来说,它是一个消息系统,消息系统的核心就是窗口...对于WPF来说也是如此。那么WPF内部为什么需要窗口,又存在哪些窗口呢?...在这5个窗口中,只有一个是可见的,可以处理输入事件与用户交互,其他4个窗口都是不可见的,帮助WPF处理来自其他方面的消息。...接下来我会来介绍究竟这5个Win32的窗口如何帮助WPF处理消息,我会根据每个窗口创建的顺序来介绍。
本文告诉大家如何获取应用内的所有窗口,无论这些窗口有没显示 在 WPF 可以通过 Application.Current.Windows 列举应用的所有窗口 foreach(Window window...in Application.Current.Windows ) { Console.WriteLine(window.Title); } 如果需要获取一个线程的窗口,请看代码...handleList.Add(hWnd); return true; }, IntPtr.Zero); } return handleList; } WPF...一个空的 WPF 程序有多少个窗口 WPF 内部的5个窗口之 MediaContextNotificationWindow
2)多屏幕下单实例窗口,当父窗口移动到其它屏幕时,单实例窗口再次弹出时,位置才更新到父窗口屏幕。... /// 窗口每次显示时,如父窗口与当前窗口不在同一屏幕时,窗口居中 /// 可以解决单实例窗口弹出不居中问题...;禁用下次触发进入 Visibile VisibileInDifferentScreen窗口显示时,如父窗口与当前窗口不在同一屏幕时,窗口居中....怎么判断当前子窗口与父窗口是否在同一屏幕?...,因此需额外处理,根据屏幕Location设置位置; 父窗口最大化时 --父窗口最大化时,父窗口的location,因窗口设置margin,有可能不准确,故取屏幕位置 CenterOwner窗口居中显示
在 WPF 中,如果是鼠标点击拖动窗口坐标,可以调用 Window 的 DragMove 方法,但是如果是触摸,就需要自己调用 Win32 的方法实现 在 WPF 中,调用 Window 的 DragMove...或英文版的代码 System.InvalidOperationException:"Can only call DragMove when primary mouse button is down" 因此想要在 WPF...而此时不能通过 Window 的 Top 和 Left 属性获取,这两个属性的值使用的是 WPF 单位和坐标,而咱计算的 dx 和 dy 是相对于屏幕的坐标,因此需要调用 GetWindowRect 这个...库 参考 WPF Touch DragMove() - CodeProject [Solved] How to drag window with finger not mouse - CodeProject...Can only call DragMove when primary mouse button is down. microsoft/XamlBehaviorsWpf: Home for WPF XAML
本文告诉大家如何添加窗口消息钩子 窗口消息钩子需要先拿到窗口指针然后需要在窗口初始化完成之后才可以做到,推荐的做法请看代码 public MainWindow() {
本文告诉大家如何获取应用内的所有窗口,无论这些窗口有没显示 在 WPF 可以通过 Application.Current.Windows 列举应用的所有窗口 foreach(Window window...in Application.Current.Windows ) { Console.WriteLine(window.Title); } 如果需要获取一个线程的窗口,请看代码...handleList.Add(hWnd); return true; }, IntPtr.Zero); } return handleList; } WPF...一个空的 WPF 程序有多少个窗口 WPF 内部的5个窗口之 MediaContextNotificationWindow ---- 本文会经常更新,请阅读原文: https://...lindexi.gitee.io/post/WPF-%E8%8E%B7%E5%8F%96%E5%BA%94%E7%94%A8%E7%9A%84%E6%89%80%E6%9C%89%E7%AA%97%E5%
本文告诉大家如何解决这个问题,在 WPF 的软件,弹出一个模态窗口。使用另一个窗口在模态窗口前面。从任务栏打开模态窗口。关闭模态窗口。这时发现,主窗口会在刚才使用的另一个窗口下面。...可以运行代码:wpf-issues/ChildWindows 在上面的网站有详细的视频告诉大家是如何做的就可以看到这个问题。...在窗口关闭的时候,Windows 会找一个在这个窗口下方的第一个可用的窗口,激活他。因为弹出模态窗口的主窗口是被禁用的。...所以在模态窗口关闭的时候,就忽略了主窗口可以激活,于是找到主窗口下方的一个可以被激活的窗口,这时激活他,于是这个被找到的窗口就在主窗口的上面。 那么这个问题可以如何解决?...参见 关闭模态窗口后,父窗口居然跑到了其他窗口的后面 ----
WPF 使用 WindowChrome,在自定义窗口标题栏的同时最大程度保留原生窗口样式(类似 UWP/Chrome) 发布于 2018-07-12 07:57...更新于 2018-09-05 05:46 WPF 自定义窗口样式有多种方式,不过基本核心实现都是在修改 Win32 窗口样式。...本文将使用 WindowChrome 来自定义窗口样式,使其既保留原生窗口样式和交互习惯,又能够具备一定的自定义空间。...▲ Chrome 普通窗口 ? ▲ Chrome 最大化窗口 为什么不做无边框窗口? WPF 自定义窗口可是非常容易的,完全自定义样式、异形都不在话下。...第三方应用集成 第三方截图应用可以毫无障碍地捕捉到标准窗口的外框范围,但如果我们没有模拟好(而是拿一个 WPF 无边框窗口模拟),那么第三方截图应用就截不准(可能会超出窗口本来的大小)。
本文告诉大家如何解决这个问题,在 WPF 的软件,弹出一个模态窗口。使用另一个窗口在模态窗口前面。从任务栏打开模态窗口。关闭模态窗口。这时发现,主窗口会在刚才使用的另一个窗口下面。...可以运行代码:wpf-issues/ChildWindows 在上面的网站有详细的视频告诉大家是如何做的就可以看到这个问题。...在窗口关闭的时候,Windows 会找一个在这个窗口下方的第一个可用的窗口,激活他。因为弹出模态窗口的主窗口是被禁用的。...所以在模态窗口关闭的时候,就忽略了主窗口可以激活,于是找到主窗口下方的一个可以被激活的窗口,这时激活他,于是这个被找到的窗口就在主窗口的上面。 那么这个问题可以如何解决?...参见 关闭模态窗口后,父窗口居然跑到了其他窗口的后面
本文来告诉大家在 WPF 中,设置窗口全屏化的一个稳定的设置方法。在设置窗口全屏的时候,经常遇到的问题就是应用程序虽然设置最大化加无边框,但是此方式经常会有任务栏冒出来,或者说窗口没有贴屏幕的边。...RootVisual is Window window) { //确保窗口的 WPF...WPF属性,否则会破坏RestoreBounds,且WPF窗口自身在最大化时,不会修改 Left Top Width Height 属性 {...WPF属性,否则会破坏RestoreBounds,且WPF窗口自身在最大化时,不会修改 Left Top Width Height 属性 {...WPF 属性与 Win32 位置一致,防止有逗比全屏后改 WPF 的属性,发生一些诡异的行为 //下面这样做其实不太好,会再次触发
最近在开发一个 Toast 窗口,因为这个窗口不能在显示之后关闭,因为可能用户会不停让窗口显示,所以只能 Hide 。...但是这样会在 切换窗口看到这个窗口,所以我找到了一个方法来让 WPF 窗口不在切换窗口显示。...现在的 WPF 程序只要设置了不在任务栏显示,而且设置窗口Visibility="Hidden"就可以不在切换窗口显示窗口。...实际上在切换窗口不显示窗口要求窗口是:WS_EX_TOOLWINDOW 或其他窗口的子窗口,但是可以看到 Toast 不是其他窗口的子窗口,所以只能设置窗口。...因为只要设置窗口是WS_EX_TOOLWINDOW就不会在切换窗口显示,所以需要使用一些特殊的代码。
在 WPF 中通过设置 WindowStyle 为 None 以及 WindowState 为 Maximized 进入全屏,同时设置 AllowsTransparency 支持透明,此时弹出一个设置...WindowStyle 是 None 的子窗口,用 VisualStudio 2019 运行将会看到 子窗口 先显示出来,然后回到主窗口下面,然后再显示到主窗口上面 其实此问题我没有复现 此问题步骤十分简单...,等一下又回到主窗口上方。...也就是子窗口显示一下然后不显示,可以看到出现闪烁 注意,此时如果没有在 VisualStudio 2019 附加调试,那么不会看到子窗口闪烁 解决方法有两个 第一个方法是去掉主窗口的 AllowsTransparency...window, and then the child window is displayed again in front of the main window · Issue #2761 · dotnet/wpf
领取专属 10元无门槛券
手把手带您无忧上云