WPF动态创建的window窗体dpi异常问题

项目中有一个需求,需要在WPF的主窗体中点击按钮创建一个子窗体,子窗体的位置需要跟随父窗体移动,在多屏幕且各个屏幕dpi不同的情况下,动态创建的窗体在创建时的初始dpi是程序运行时所在屏幕(简单来说,比如有屏幕1、2,在屏幕1上双击图标运行了程序,然后将程序拖到屏幕2上去,屏幕1就是程序运行的初始屏幕,动态创建的子窗体dpi初始值就与屏幕1的dpi相同),此时再根据坐标移动子窗体时就会出现坐标计算错误,而且该问题仅在初始时出现。
解决办法:在动态创建子窗体后,子窗体需要先调用show方法,然后获取此时子窗体的缩放比

var source = PresentationSource.FromVisual(myWindow);
if (source != null)
    dpiRatio = source.CompositionTarget.TransformToDevice.M11;

还要用同样方法获取到此时父窗体的dpi,然后根据两个dpi计算对应的坐标

你可能感兴趣的:(客户端,wpf)