WPF PopupNonTopmost重写
之前做WPF遇到问题,在网上找到的一个类
1 public class PopupNonTopmost : System.Windows.Controls.Primitives.Popup 2 { 3 public static DependencyProperty TopmostProperty = Window.TopmostProperty.AddOwner( 4 typeof(PopupNonTopmost), 5 new FrameworkPropertyMetadata(false, OnTopmostChanged)); 6 7 public bool Topmost 8 { 9 get { return (bool)GetValue(TopmostProperty); } 10 set { SetValue(TopmostProperty, value); } 11 } 12 13 private static void OnTopmostChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) 14 { 15 (obj as PopupNonTopmost).UpdateWindow(); 16 } 17 18 protected override void OnOpened(EventArgs e) 19 { 20 UpdateWindow(); 21 } 22 23 private void UpdateWindow() 24 { 25 var hwnd = ((HwndSource)PresentationSource.FromVisual(this.Child)).Handle; 26 RECT rect; 27 28 if (GetWindowRect(hwnd, out rect)) 29 { 30 SetWindowPos(hwnd, Topmost ? -1 : -2, rect.Left, rect.Top, (int)this.Width, (int)this.Height, 0); 31 } 32 } 33 34 #region P/Invoke imports & definitions 35 36 [StructLayout(LayoutKind.Sequential)] 37 public struct RECT 38 { 39 public int Left; 40 public int Top; 41 public int Right; 42 public int Bottom; 43 } 44 45 [DllImport("user32.dll")] 46 [return: MarshalAs(UnmanagedType.Bool)] 47 private static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect); 48 49 [DllImport("user32", EntryPoint = "SetWindowPos")] 50 private static extern int SetWindowPos(IntPtr hWnd, int hwndInsertAfter, int x, int y, int cx, int cy, int wFlags); 51 52 #endregion 53 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界