WPF C#多个监视器恢复125%的位置缩放
我在恢复Avalondock中的浮动工具时遇到问题。 Im开发的应用程序使用avalondock和一些工具进行文档管理。 我通常使用第二台显示器上的工具 我在工作中使用多个监视器,其中一个监视器的缩放比例为125%,另一个监视器的缩放比例为100%。主监视器是4k监视器,另一个是2k监视器 当我用一个监视器(3440x1440)远程桌面工作电脑并运行应用程序时,我注意到第二个监视器中的工具不可见,我无法将它们带回主屏幕 Avalondock的浮动布局表不作为单独的视图处理。 如果有人知道如何将LayoutAnchorable作为单独的windows视图,那将是最好的解决方案。但是我找不到怎么做。我尝试了以下方法WPF C#多个监视器恢复125%的位置缩放,c#,wpf,C#,Wpf,我在恢复Avalondock中的浮动工具时遇到问题。 Im开发的应用程序使用avalondock和一些工具进行文档管理。 我通常使用第二台显示器上的工具 我在工作中使用多个监视器,其中一个监视器的缩放比例为125%,另一个监视器的缩放比例为100%。主监视器是4k监视器,另一个是2k监视器 当我用一个监视器(3440x1440)远程桌面工作电脑并运行应用程序时,我注意到第二个监视器中的工具不可见,我无法将它们带回主屏幕 Avalondock的浮动布局表不作为单独的视图处理。 如果有人知道如何将L
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;
}
}