WPF Popup 相关内容
引自: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 相关内容相关推荐
- WPF RichTextBox相关总结
由于公司涉及到聊天对话框的功能,就想到了RichTextBox,查阅相关资料,总结下: 一.RichTextBox的内容相关的类 1.1RichTextBox的内容结构 RichTexBox是个可编辑 ...
- iOS 发布APP关于IDFA的相关内容
您的 App 正在使用广告标识符 (IDFA).您必须先提供关于 IDFA 的使用信息或将其从 App 中移除,然后再上传您的二进制文件. 如果出现下边这两张图,你就会感到蛋蛋的忧伤 还有这个 怎么解 ...
- golang实践LSM相关内容
LSM LSM(log-structured merge-tree)是一种分层,有序,面向磁盘的数据结构,其核心思想是充分了利用了,磁盘批量的顺序写要远比随机写性能高出很多,在计算机科学中,日志结构的 ...
- Assembly--及相关内容
Assembly--及相关内容 0.2672019.06.04 09:29:26字数 448阅读 88 De novo genome assembly Hybrid error correction ...
- Android开发环境——Eclipse ADT相关内容汇总
Android开发环境将分为SDK相关内容.Eclipse ADT相关内容.模拟器AVD相关内容.调试器DDMS相关内容.日志LogCat相关内容.连接驱动ADB相关内容.内存泄露检测工具MAT相关 ...
- 基于KNN的相关内容推荐
如果做网站的内容运营,相关内容推荐可以帮助用户更快地寻找和发现感兴趣的信息,从而提升网站内容浏览的流畅性,进而提升网站的价值转化.相关内容 推荐最常见的两块就是"关联推荐"和&qu ...
- 【SeeMusic】创建 SeeMusic 工程并编辑相关内容 ( 创建工程 | 导入 MIDI 文件 | 导入音频 | 导入视频 )
SeeMusic 系列文章目录 [SeeMusic]下载安装并注册 SeeMusic 软件 [SeeMusic]创建 SeeMusic 工程并编辑相关内容 ( 创建工程 | 导入 MIDI 文件 | ...
- Android开发环境——模拟器AVD相关内容汇总
Android开发环境将分为SDK相关内容.Eclipse ADT相关内容.模拟器AVD相关内容.调试器DDMS相关内容.日志LogCat相关内容.连接驱动ADB相关内容.内存泄露检测工具MAT相关内 ...
- DCMTK:OFpath和相关内容的测试程序
DCMTK:OFpath和相关内容的测试程序 OFpath和相关内容的测试程序 OFpath和相关内容的测试程序 #include "dcmtk/config/osconfig.h" ...
最新文章
- NLP(5) | 命名实体识别
- unittest框架(三)unittest+yaml数据驱动
- Tomcat - 模拟Tomcat的webappClassLoader加载自己war包应用内不同版本类实现相互共存与隔离
- 桌面快捷键和桌面livefolder
- WEB入门之二十 插件
- softmax with cross-entropy loss求导(转载+细节整理)
- UNP Chapter 27 - 客户-服务器程序其他设计方法
- 数据结构(一)快速排序
- mongodb与mysql的区别与具体应用场景
- C++进阶教程之命名空间
- 百度地图出现网格,不显示地图
- paip.c++ qt 目录遍历以及文件操作
- Java基础IO流 韩顺平Java笔记
- 小米平板2wifi驱动下载_小米平板2windows系统无线网怎么连接
- 企业邮箱在outlook登录邮件如何撤回?
- 鸿蒙系统共享电脑文件,鸿蒙Hi3516通过NFS挂载方式与Windows共享文件
- 流星加速器木马分析与处置方案
- 3D 文件格式 - 对应厂商
- 【工具篇】Unity使用Spine2D动画,代码控制
- 文本挖掘 包含中英文数据预处理以及分析