WPF Popup 置顶问题

简介: 原文 WPF Popup 置顶问题 问题: 使用wpf的popup,当在popup中弹出MessageBox或者打开对话框的时候,popup总是置顶,并遮住MessageBox或对话框. 解决: 写如下用户控件   需导入的空间: using System.

原文 WPF Popup 置顶问题

问题:

使用wpf的popup,当在popup中弹出MessageBox或者打开对话框的时候,popup总是置顶,并遮住MessageBox或对话框.

解决:

写如下用户控件

 

需导入的空间: using System.Windows.Controls.Primitives;

    using System.Runtime.InteropServices;

    using System.Windows.Interop;

 

 

[c-sharp]  view plain copy
 
  1. public class CCPopup : Popup  
  2.     {  
  3.         public static DependencyProperty TopmostProperty = Window.TopmostProperty.AddOwner(typeof(CCPopup), new FrameworkPropertyMetadata(false, OnTopmostChanged));  
  4.         public bool Topmost  
  5.         {  
  6.             get { return (bool)GetValue(TopmostProperty); }  
  7.             set { SetValue(TopmostProperty, value); }  
  8.         }  
  9.         private static void OnTopmostChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)  
  10.         {  
  11.             (obj as CCPopup).UpdateWindow();  
  12.         }  
  13.         protected override void OnOpened(EventArgs e)  
  14.         {  
  15.             UpdateWindow();  
  16.         }  
  17.         private void UpdateWindow()  
  18.         {  
  19.             var hwnd = ((HwndSource)PresentationSource.FromVisual(this.Child)).Handle;  
  20.             RECT rect;  
  21.             if (GetWindowRect(hwnd, out rect))  
  22.             {  
  23.                 SetWindowPos(hwnd, Topmost ? -1 : -2, rect.Left, rect.Top, (int)this.Width, (int)this.Height, 0);  
  24.             }  
  25.         }  
  26.         #region P/Invoke imports & definitions  
  27.         [StructLayout(LayoutKind.Sequential)]  
  28.         public struct RECT  
  29.         {  
  30.             public int Left;  
  31.             public int Top;  
  32.             public int Right;  
  33.             public int Bottom;  
  34.         }  
  35.         [DllImport("user32.dll")]  
  36.         [return: MarshalAs(UnmanagedType.Bool)]  
  37.         private static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);  
  38.         [DllImport("user32", EntryPoint = "SetWindowPos")]  
  39.         private static extern int SetWindowPos(IntPtr hWnd, int hwndInsertAfter, int x, int y, int cx, int cy, int wFlags);  
  40.         #endregion  
  41.     }  

 

目录
相关文章
|
2月前
|
前端开发 C#
浅谈WPF之Popup弹出层
在日常开发中,当点击某控件时,经常看到一些弹出框,停靠在某些页面元素的附近,但这些又不是真正的窗口,而是页面的一部分,那这种功能是如何实现的呢?今天就以一个简单的小例子,简述如何在WPF开发中,通过Popup实现鼠标点击弹出浮动停靠窗口,仅供学习分享使用,如有不足之处,还请指正。
53 0
|
C#
【WPF】使用Popup控件做浮窗/提示框
原文:【WPF】使用Popup控件做浮窗/提示框 需求:当鼠标移入某个区域时,弹出一个浮窗,以便用户进行下一步操作。 效果如下图: 当鼠标移入左上角的【多选显示】框内,出现下面的浮窗(悬浮在原UI之上)。
4190 0
|
C#
关于WPF中Popup中的一些用法的总结
原文:关于WPF中Popup中的一些用法的总结   Popup控件是一个常用的非常有用的控件,顾明思义就是弹出式控件,首先我们来看看MSDN对它的解释吧,表示具有内容的弹出窗口,这个是非常重要的控件,我们看看它的继承关系吧:  System.
1432 0
|
C#
关于wpf中popup跟随鼠标移动显示
原文:关于wpf中popup跟随鼠标移动显示 最近在做一个画图工具,里面有一个功能是需要实现,当鼠标移动的时候在,鼠标的旁边显示坐标信息。 第一反应是想到了tooltip,但是tooltip有许多的限制,查询资料的过程中看到了popup,popup比tooltip更加灵活,下面讲讲tooltip跟popup的区别: 1.tooltip会自动显示,自动隐藏,而popup则需要设置IsOpen属性,并且在Popup.StaysOen属性为true时,Popup控件会一直显示,直到显式地将IsOpen属性设置为False。
1915 0
|
C#
WPF中Popup的几个问题
原文:WPF中Popup的几个问题 要用popup控件来解决一些问题。就此带来了一批问题。 问题一、 在popup外任意位置点击时要能关闭popup,这个本来简单,只要加上StaysOpen=false就可以了。
1316 0
WPF listview item mouse enter/over popup
This is because the routing strategy of the Loaded event is Direct, which means that the routed event does not route though an element tree.
956 0
|
前端开发 C#
WPF备忘录(1)有笑脸,有Popup
原文:WPF备忘录(1)有笑脸,有Popup 1.画个笑脸给大家娱乐一下: 效果如下:   2.
905 0
|
C#
WPF中Popup等弹窗的位置不对(偏左或者偏右)
原文:WPF中Popup等弹窗的位置不对(偏左或者偏右) 1.情况如图:    正常情况:         部分特殊情况:        在一般的电脑都能正确显示,就是第一种情况,同样的代码为什么在不同的电脑就会显示不同的位置呢,原来Windows为了满足 不同需求的用户,左撇子和右撇子,就...
1804 0
|
C#
WPF Popup 控件导致被遮挡内容不刷新的原因
原文:WPF Popup 控件导致被遮挡内容不刷新的原因                                    WPF Popup 控件导致被遮挡内容不刷新的原因                    周银辉   今天在写一个WPF控件时用到了Popup控件,很郁闷的情况是:当...
1080 0