zoukankan      html  css  js  c++  java
  • WPF Popup 置顶问题

    本文来自白锦文的博客,原文地址:http://blog.csdn.net/Baijinwen/archive/2011/01/22/6159043.aspx

    (ps:经验证可用)

    问题:

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

    解决:

    写如下用户控件

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

        using System.Runtime.InteropServices;

        using System.Windows.Interop;

     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     }
  • 相关阅读:
    jdk8:垃圾收集器
    Young GC和Full GC分别在什么情况下会发生?
    GC之Minor/Young/Major GC的区别
    Java的JJWT实现JWT
    什么是 JWT -- JSON WEB TOKEN
    Spring的两种动态代理:Jdk和Cglib 的区别和实现
    java对象结构 对象头 Markword
    偏向锁跟可重入性有什么区别
    C# 加密算法[汇总]
    Java语言:JAVA8 十大新特性详解(zz)
  • 原文地址:https://www.cnblogs.com/MarcLiu/p/3688134.html
Copyright © 2011-2022 走看看