WPF C#多个监视器恢复125%的位置缩放

WPF C#多个监视器恢复125%的位置缩放,c#,wpf,C#,Wpf,我在恢复Avalondock中的浮动工具时遇到问题。 Im开发的应用程序使用avalondock和一些工具进行文档管理。 我通常使用第二台显示器上的工具 我在工作中使用多个监视器,其中一个监视器的缩放比例为125%,另一个监视器的缩放比例为100%。主监视器是4k监视器,另一个是2k监视器 当我用一个监视器(3440x1440)远程桌面工作电脑并运行应用程序时,我注意到第二个监视器中的工具不可见,我无法将它们带回主屏幕 Avalondock的浮动布局表不作为单独的视图处理。 如果有人知道如何将L

我在恢复Avalondock中的浮动工具时遇到问题。 Im开发的应用程序使用avalondock和一些工具进行文档管理。 我通常使用第二台显示器上的工具

我在工作中使用多个监视器,其中一个监视器的缩放比例为125%,另一个监视器的缩放比例为100%。主监视器是4k监视器,另一个是2k监视器

当我用一个监视器(3440x1440)远程桌面工作电脑并运行应用程序时,我注意到第二个监视器中的工具不可见,我无法将它们带回主屏幕

Avalondock的浮动布局表不作为单独的视图处理。 如果有人知道如何将LayoutAnchorable作为单独的windows视图,那将是最好的解决方案。但是我找不到怎么做。我尝试了以下方法

if (args.Model.IsFloating)
{
    var left = (int)args.Model.FloatingLeft;
    var top = (int)args.Model.FloatingTop;
    var width = (int)args.Model.FloatingWidth;
    var height = (int)args.Model.FloatingHeight;
    var rect = new System.Drawing.Rectangle(left, top, width, height);
   var intersected = Screen.AllScreens.Any(p => p.WorkingArea.IntersectsWith(rect));
    if (!intersected)
    {                            
        //need to reposition
        args.Model.FloatingLeft = 0;
        args.Model.FloatingTop = 0;
    }
    //args.Model.FloatingTop;
}

System.Windows.SystemParameters.PrimaryScreenHeight 1440    double
System.Windows.SystemParameters.PrimaryScreenWidth  3440    double
System.Windows.SystemParameters.VirtualScreenHeight 1440    double
System.Windows.SystemParameters.VirtualScreenWidth  3440    double
args.Model.FloatingLeft 4133.6双精度 args.Model.FloatingTop 909.6双精度

工作区域{X=0 Y=0宽度=4300高度=1750}System.Drawing.Rectangle 问题是工作区域的比例为125%。 这使得args.Model在主窗口的范围内

所以我想我不能使用System.Windows.Forms.Screen信息,因为我不知道用户将使用哪个缩放


如何获得多个监视器、位置和缩放的真实分辨率

我自己找到了答案

我能够将浮动窗口所有者设置为null。 显然,dock的浮动窗口继承自System.Windows.Window 这是我从一开始就想要的

private void DockManager_LayoutUpdated(object sender, EventArgs e)
{
    foreach (var floatingWindow in dockManager.FloatingWindows)
    {
        if (floatingWindow.Owner != null)
        {
            floatingWindow.Owner = null;
        }
        floatingWindow.ShowInTaskbar = true;
    }
}

我自己找到了答案

我能够将浮动窗口所有者设置为null。 显然,dock的浮动窗口继承自System.Windows.Window 这是我从一开始就想要的

private void DockManager_LayoutUpdated(object sender, EventArgs e)
{
    foreach (var floatingWindow in dockManager.FloatingWindows)
    {
        if (floatingWindow.Owner != null)
        {
            floatingWindow.Owner = null;
        }
        floatingWindow.ShowInTaskbar = true;
    }
}