WPF Popup 置顶问题

原文 WPF Popup 置顶问题

问题:

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

解决:

写如下用户控件

 

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

    using System.Runtime.InteropServices;

    using System.Windows.Interop;

 

 

[c-sharp] view plaincopy

 

  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.     }  

 

时间: 2024-10-27 05:15:36

WPF Popup 置顶问题的相关文章

wpf当有未关闭的窗口时,点击主窗体其他地方,将未关闭的窗口弹出置顶显示

问题描述 当有未关闭的窗口时,点击主窗体其他地方时,未关闭的窗口弹出置顶显示将弹出窗口置于应用界面的上部,避免隐藏起来 解决方案 解决方案二:你ShowDialog不就完了么.解决方案三:引用1楼wyd1520的回复: 你ShowDialog不就完了么. 如果你点击显示桌面后,然后在任务栏中点击主窗体,这时只显示主窗体解决方案四:子窗体.show();设置子窗体top=0:解决方案五:遍历Application.Current.Windows集合,判断是子窗体,然后让其处于活动状态.解决方案六:

ios-iOS 点击状态栏 置顶失效怎么办?

问题描述 iOS 点击状态栏 置顶失效怎么办? ios 默认点击状态栏tableview会置顶, 但是我写的没有这个效果,有可能是什么原因影响到了? 解决方案 scrollview 的scrolltotop 设置为no

导航是Web网站重要的元素:置顶菜单的设计研究

文章描述:导航是Web网站中最重要的元素. SirsiDynix公司UX/UI设计师Hyrum Denney在Smashing Magazine上发表了一篇文章<Sticky Menus Are Quicker To Navigate>,分享了自己对"置顶菜单"进行的可用性研究成果,及实现技术和相关挑战.CSDN对该文进行了编译,内容如下: 导航是Web网站中最重要的元素之一,大部分设计师都同意这一点.尽管如此,现在的导航并不总是容易使用.通常,用户必须滚动到网站的顶部才能

百度搜索结果置顶版权小说 响应盛大文学呼吁

    百度搜索结果置顶版权小说(腾讯科技配图) 腾讯科技讯(乐天)9月20日消息,在盛大文学呼吁搜索引擎打击网络文学盗版侵权行为后,百度今日作出相应.近日网民在百度上搜索<独步天下>.<盗墓笔记>等网络热门小说时,搜索结果的第一条便是来自这些小说的版权拥有方所提供的正版阅读链接. 据了解,这是起点中文网进入百度数据开放平台的首批近百部正版小说.接下来,还将有更多网站的更多版权小说通过百度数据开放平台,出现在搜索结果的最显著位置. 近日,盛大文学旗下百位作家发布联合声明,呼吁搜索引

C#SetWindowPos窗口置顶

 [DllImport("user32.dll", CharSet = CharSet.Auto)] private static extern int SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int y, int Width, int Height, int flags); /// <summary> /// 得到当前活动的窗口 /// </summary> /// <returns&g

css控制div置顶置底的例子

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" lang="zh-CN"

jQuery实现表格行上下移动和置顶效果

  本文给大家分享的是一款由jQuery实现的表格行上下移动以及置顶效果的代码,非常的简单实用,这里给出了核心代码,有需要的小伙伴可以参考下. 我们在操作列表数据的时候,需要将数据行排列顺序进行调整,如上移和下移行,将行数据置顶等,这些操作都可以在前端通过点击按钮来完成,并且伴随着简单的动态效果,轻松实现表格数据排序. HTML 页面上是一个简单的数据表格,我们在数据行中分别放置"上移","下移"和"置顶"三个链接,并且分别定义三个class属性

jQuery实现表格行上移下移和置顶的方法

  本文实例讲述了jQuery实现表格行上移下移和置顶的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 6

jquery实现标签上移、下移、置顶

  jquery实现标签上移.下移.置顶         这篇文章主要介绍了jquery实现标签上移.下移.置顶的相关资料,并附上示例,非常实用,需要的朋友可以参考下 eg:如在后台的标签列表中,实现上移.下移.置顶功能 主要实现思路是节点操作,比如说:上移,直接把点击项移动到前一个节点,以此类推,当然实际代码实现还要加些判断,如当前点击操作项是否已经是置底或置底了,如果是则给点相应提示,好让操作者知道发生了什么事情. 思路: 1.先用到的克隆方法.clone(true): 即把当前要移动的项先