首页 > 其他 > 详细

WPF Popup 置顶问题

时间:2014-02-09 17:47:59      阅读:471      评论:0      收藏:0      [点我收藏+]

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

WPF Popup 置顶问题

原文:http://www.cnblogs.com/lonelyxmas/p/3541665.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!