引自:http://technet.microsoft.com/zh-cn/magazine/bb613596(VS.90).aspx

   http://www.th7.cn/Program/WPF/201307/142902.shtml

  http://www.th7.cn/Program/WPF/201307/141820.shtml

1、Popup弹出的位置

  相关属性:Placement,PlacementTarget。具体看http://technet.microsoft.com/zh-cn/magazine/bb613596(VS.90).aspx

2、popup始终置顶的问题

  只要设置Popup的StayOpen为true,则popup始终显示在桌面的最顶层,解决方法参考:http://www.th7.cn/Program/WPF/201307/141820.shtml,自定义CustomPopup

public class CustomPopup : Popup{public static DependencyProperty TopmostProperty = Window.TopmostProperty.AddOwner(typeof(CustomPopup), new FrameworkPropertyMetadata(false, OnTopmostChanged));public bool Topmost{get { return (bool)GetValue(TopmostProperty); }set { SetValue(TopmostProperty, value); }}private static void OnTopmostChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e){(obj as CustomPopup).UpdateWindow();}protected override void OnOpened(EventArgs e){UpdateWindow();}private void UpdateWindow(){var hwnd = ((HwndSource)PresentationSource.FromVisual(this.Child)).Handle;RECT rect;if (GetWindowRect(hwnd, out rect)){SetWindowPos(hwnd, Topmost ? -1 : -2, rect.Left, rect.Top, (int)this.Width, (int)this.Height, 0);}}#region P/Invoke imports & definitions[StructLayout(LayoutKind.Sequential)]public struct RECT{public int Left;public int Top;public int Right;public int Bottom;}[DllImport("user32.dll")][return: MarshalAs(UnmanagedType.Bool)]private static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);[DllImport("user32", EntryPoint = "SetWindowPos")]private static extern int SetWindowPos(IntPtr hWnd, int hwndInsertAfter, int x, int y, int cx, int cy, int wFlags);#endregion}

View Code

3、实现Popup的拖动功能

参考:http://www.th7.cn/Program/WPF/201307/142902.shtml

后台代码:其中PopupMouseDown是Popup内部一个Grid的MousLeftButtonDown事件的处理方法,xmal代码就不贴了。

[DllImport("user32.dll")]public static extern IntPtr WindowFromPoint(POINT Point);[DllImport("user32.dll")][return: MarshalAs(UnmanagedType.Bool)]public static extern bool GetCursorPos(out POINT lpPoint);[DllImportAttribute("user32.dll")]public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);[DllImportAttribute("user32.dll")]public static extern bool ReleaseCapture();[StructLayout(LayoutKind.Sequential)]public struct POINT { public int X; public int Y;}        public const int WM_NCLBUTTONDOWN = 0xA1; public const int HT_CAPTION = 0x2;private void PopupMouseDown(object sender, MouseButtonEventArgs e){POINT curPos;IntPtr hWndPopup;GetCursorPos(out curPos);hWndPopup = WindowFromPoint(curPos);ReleaseCapture();SendMessage(hWndPopup, WM_NCLBUTTONDOWN, new IntPtr(HT_CAPTION), IntPtr.Zero);}

View Code

4、Popup不随窗体移动

参考:http://stackoverflow.com/questions/1600218/how-to-move-a-wpf-popup

  http://social.msdn.microsoft.com/Forums/zh-CN/wpfzhchs/thread/2616e607-3954-4bfd-ae29-e0d813263030

方法很多,具体看上面2个,这里推荐2种:

注册窗体的LocationChanged事件:

public MainWindow()
{ LocationChanged += new EventHandler(MainWindow_LocationChanged);}

View Code

在事件处理方法中:

void MainWindow_LocationChanged(object sender, EventArgs e)
{
//方法1
var mi = typeof(Popup).GetMethod("UpdatePosition", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
mi.Invoke(popBottom, null);//方法2
//popBottom.ClearValue(Popup.IsOpenProperty);//popBottom.IsOpen = true;
}

View Code

转载于:https://www.cnblogs.com/MarcLiu/p/3754820.html

WPF Popup 相关内容相关推荐

  1. WPF RichTextBox相关总结

    由于公司涉及到聊天对话框的功能,就想到了RichTextBox,查阅相关资料,总结下: 一.RichTextBox的内容相关的类 1.1RichTextBox的内容结构 RichTexBox是个可编辑 ...

  2. iOS 发布APP关于IDFA的相关内容

    您的 App 正在使用广告标识符 (IDFA).您必须先提供关于 IDFA 的使用信息或将其从 App 中移除,然后再上传您的二进制文件. 如果出现下边这两张图,你就会感到蛋蛋的忧伤 还有这个 怎么解 ...

  3. golang实践LSM相关内容

    LSM LSM(log-structured merge-tree)是一种分层,有序,面向磁盘的数据结构,其核心思想是充分了利用了,磁盘批量的顺序写要远比随机写性能高出很多,在计算机科学中,日志结构的 ...

  4. Assembly--及相关内容

    Assembly--及相关内容 0.2672019.06.04 09:29:26字数 448阅读 88 De novo genome assembly Hybrid error correction ...

  5. Android开发环境——Eclipse ADT相关内容汇总

     Android开发环境将分为SDK相关内容.Eclipse ADT相关内容.模拟器AVD相关内容.调试器DDMS相关内容.日志LogCat相关内容.连接驱动ADB相关内容.内存泄露检测工具MAT相关 ...

  6. 基于KNN的相关内容推荐

    如果做网站的内容运营,相关内容推荐可以帮助用户更快地寻找和发现感兴趣的信息,从而提升网站内容浏览的流畅性,进而提升网站的价值转化.相关内容 推荐最常见的两块就是"关联推荐"和&qu ...

  7. 【SeeMusic】创建 SeeMusic 工程并编辑相关内容 ( 创建工程 | 导入 MIDI 文件 | 导入音频 | 导入视频 )

    SeeMusic 系列文章目录 [SeeMusic]下载安装并注册 SeeMusic 软件 [SeeMusic]创建 SeeMusic 工程并编辑相关内容 ( 创建工程 | 导入 MIDI 文件 | ...

  8. Android开发环境——模拟器AVD相关内容汇总

    Android开发环境将分为SDK相关内容.Eclipse ADT相关内容.模拟器AVD相关内容.调试器DDMS相关内容.日志LogCat相关内容.连接驱动ADB相关内容.内存泄露检测工具MAT相关内 ...

  9. DCMTK:OFpath和相关内容的测试程序

    DCMTK:OFpath和相关内容的测试程序 OFpath和相关内容的测试程序 OFpath和相关内容的测试程序 #include "dcmtk/config/osconfig.h" ...

最新文章

  1. NLP(5) | 命名实体识别
  2. unittest框架(三)unittest+yaml数据驱动
  3. Tomcat - 模拟Tomcat的webappClassLoader加载自己war包应用内不同版本类实现相互共存与隔离
  4. 桌面快捷键和桌面livefolder
  5. WEB入门之二十 插件
  6. softmax with cross-entropy loss求导(转载+细节整理)
  7. UNP Chapter 27 - 客户-服务器程序其他设计方法
  8. 数据结构(一)快速排序
  9. mongodb与mysql的区别与具体应用场景
  10. C++进阶教程之命名空间
  11. 百度地图出现网格,不显示地图
  12. paip.c++ qt 目录遍历以及文件操作
  13. Java基础IO流 韩顺平Java笔记
  14. 小米平板2wifi驱动下载_小米平板2windows系统无线网怎么连接
  15. 企业邮箱在outlook登录邮件如何撤回?
  16. 鸿蒙系统共享电脑文件,鸿蒙Hi3516通过NFS挂载方式与Windows共享文件
  17. 流星加速器木马分析与处置方案
  18. 3D 文件格式 - 对应厂商
  19. 【工具篇】Unity使用Spine2D动画,代码控制
  20. 文本挖掘 包含中英文数据预处理以及分析

热门文章

  1. Python之路【第三篇】:Python基础(二)
  2. 简要分析unity3d中剪不断理还乱的yield
  3. HDU 1800(字典树)
  4. [DP思考录]向左走,向右走: Observer模式 VS Mediator模式
  5. (50)FPGA数组描述(reg型)
  6. (84)Verilog HDL:四舍五入
  7. neo4j python_Python 操作 Neo4j 数据库!
  8. Linux驱动学习2
  9. 2023.TortoiseGit 工具
  10. 【C语言】一维数组排序(函数,数组和循环结构语句)