首页 > 其他分享 >解决WPF下popup不随着window一起移动的问题

解决WPF下popup不随着window一起移动的问题

时间:2024-03-04 17:13:01浏览次数:26  
标签:Popup 移动 System window popup 窗体 WPF null DependencyObject

解决WPF下popup不随着window一起移动的问题_小戴BOTAOY演示博客 (yii666.com)

/// <summary>

/// Popup帮助类,解决Popup设置StayOpen="True"时,移动窗体或者改变窗体大小时,Popup不随窗体移动的问题

/// </summary>

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);

                };

            }

        }

    }

}
View Code

使用方法:

<Popup x:Name="popusBottom2" IsOpen="True" local:PopopHelper.PopupPlacementTarget="{Binding ElementName=PCheckBox2}" AllowsTransparency="True" PopupAnimation="Fade" HorizontalOffset="5" VerticalOffset="-420">

  <Image x:Name="panel_preview" Height="100" Width="100"></Image>

</Popup>
View Code

 

标签:Popup,移动,System,window,popup,窗体,WPF,null,DependencyObject
From: https://www.cnblogs.com/MarcLiu/p/18052151

相关文章

  • 07Windows系统安装的准备工作1
    Windows系统安装的准备工作1重装系统,这是一个许多人听而却步的事情.我会尽量让这个事情变得简单,通俗,易懂.学习由表象到本质,由浅入深是很重要的.准备Windows10光盘映像文件(ISO)光盘映像文件,简称映像.为什么一定是光盘呢?因为微软发布的操作系统都是以光盘为介质销售的.ISO......
  • 调整window下qt界面的缩放比例为自适应
    原因:QtCreator的缩放策略是四舍五入,只能缩放到1或2,而不是1.5,就比如系统缩放为150%,qt界面则会被缩放为200%解决办法:Linux下:exportQT_SCALE_FACTOR_ROUNDING_POLICY=PassThrough1.这行代码是环境变量设置的一部分,用于指定QT应用程序的缩放因子舍入策略。QT_SCALE_FACTOR......
  • windows 磁盘锁 bitlocker关闭
      要关闭BitLocker等待激活的状态,可以按照以下步骤操作:打开命令提示符(CMD),以管理员身份运行。使用`manage-bde-off`命令关闭BitLocker加密。例如,关闭E盘的BitLocker加密命令为`manage-bde-offE:`。运行命令后,系统会对指定的磁盘进行解密工作,可能需要等......
  • Windows操作系统中的时间戳(Timestamp)是指用于标记事件发生时间的一种时间表示方式。在
    Windows操作系统中的时间戳(Timestamp)是指用于标记事件发生时间的一种时间表示方式。在计算机系统中,时间戳通常用来记录文件的创建时间、修改时间、访问时间等信息,也常用于网络通信中的认证和数据同步等场景。以下是Windows时间戳的基础技术原理:系统时钟:Windows操作系统通过系统......
  • python接口自动化系列(13):windows下allure报告展示
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/18033074实现目标上一步获取到测试报告的数据了,这里我们通过命令生成报告并在浏览器中查看报告。 allure-commandline在windows下安装、配置参考:https://www.cnblogs.com/uncleyong/p/16726826.html windows......
  • Android模拟蓝牙蓝牙键盘——适配Android和Windows
    学校寒假有个程序设计比赛,我也一直想要去写一个安卓模拟的蓝牙键盘,这样无论到哪里,比如班班通和没有键盘的电脑设备,有手机就可以操作它,也比USB方便一些。忙活了一个寒假,也走了不少歪路,终于整成了,下面分享一些经验。代码思路①第一步是蓝牙HID的初始化在安卓API28后开放了Bluetoo......
  • Windows基础
    NTLM协议LM加密算法  LMHash的明文密码被限制在14位以内。如果LMHash的值为aad3b435b51404eeaad3b435b51404ee,说明LMHasg为空或者被禁用了。加密流程  以P@ss1234来演示LMHash的加密流程:    1)将用户的明文口令转化为大写,并转化为16进制字符串。   ......
  • LTSC2021安装Windows Terminal
    Microsoft.VCLibs.x64.14.00.DesktopAdd-AppPackage.\Microsoft.VCLibs.x64.14.00.Desktop.appxMicrosoft.UI.XamlAdd-AppPackage.\Microsoft.UI.Xaml.2.8.x64.appxWindowsTerminalAdd-AppxPackage.\Downloads\Microsoft.WindowsTerminal_1.19.10573.0_8wekyb3d8......
  • 对于 Windows 系统的入侵排查,以下是一些基础的排查方法
    对于Windows系统的入侵排查,以下是一些基础的排查方法:检查系统日志:WindowsEventViewer中有各种日志,包括安全日志、应用程序日志等。检查这些日志是否有异常登录、异常操作等记录。扫描恶意软件:运行杀毒软件和反间谍软件来扫描系统,确保系统没有受到恶意软件感染。......
  • 对于Windows系统的入侵痕迹溯源,以下是一些基础技术原理
    对于Windows系统的入侵痕迹溯源,以下是一些基础技术原理:日志分析:通过分析Windows系统的各类日志,包括安全日志、事件日志、系统日志等,可以追踪潜在的入侵行为和异常活动。关注登录记录、权限变更、文件访问等操作,以发现不明示的活动。网络流量分析:监控网络流量,并分析与Windows......