解决popup不随着window一起移动的问题
发布日期:2021-08-22 06:43:13 浏览次数:4 分类:技术文章

本文共 1995 字,大约阅读时间需要 6 分钟。

原文:

当我们设置Popup的StayOpen="True"时,会发现移动窗体或者改变窗体的Size的时候,Popup并不会跟随着一起移动位置。为了解决这个问题,可以给Popup定义一个附加属性,代码如下所示:

/// /// Popup帮助类,解决Popup设置StayOpen="True"时,移动窗体或者改变窗体大小时,Popup不随窗体移动的问题/// public class PopopHelper{    public static DependencyObject GetPopupPlacementTarget(DependencyObject obj)    {        return (DependencyObject)obj.GetValue(PopupPlacementTargetProperty);    }    public static void SetPopupPlacementTarget(DependencyObject obj, DependencyObject value)    {        obj.SetValue(PopupPlacementTargetProperty, value);    }        public static readonly DependencyProperty PopupPlacementTargetProperty =        DependencyProperty.RegisterAttached("PopupPlacementTarget", typeof(DependencyObject), typeof(PopopHelper), new PropertyMetadata(null, OnPopupPlacementTargetChanged));    private static void OnPopupPlacementTargetChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)    {        if (e.NewValue != null)        {            DependencyObject popupPopupPlacementTarget = e.NewValue as DependencyObject;            Popup pop = d as Popup;            Window w = Window.GetWindow(popupPopupPlacementTarget);            if (null != w)            {                //让Popup随着窗体的移动而移动                w.LocationChanged += delegate                {                    var mi = typeof(Popup).GetMethod("UpdatePosition", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);                    mi.Invoke(pop, null);                };                //让Popup随着窗体的Size改变而移动位置                w.SizeChanged += delegate                {                    var mi = typeof(Popup).GetMethod("UpdatePosition", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);                    mi.Invoke(pop, null);                };            }        }    }}

使用方法:

参考博客地址:

1、http://www.cnblogs.com/Leaco/p/3168540.html

2、http://www.cnblogs.com/xiaokang088/archive/2011/07/06/2099489.html

转载地址:https://blog.csdn.net/weixin_33738555/article/details/89592593 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:WPF的消息机制(三)- WPF内部的5个窗口之处理激活和关闭的消息窗口以及系统资源通知窗口...
下一篇:java后台创建url连接,获取接口数据

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月13日 23时46分15秒