Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自定义DPI辅助屏幕的实际分辨率_C#_Wpf_Xaml - Fatal编程技术网

C# 自定义DPI辅助屏幕的实际分辨率

C# 自定义DPI辅助屏幕的实际分辨率,c#,wpf,xaml,C#,Wpf,Xaml,我正致力于使应用程序适应自定义DPI值(Windows缩放) 如果我理解正确,缩放会让应用程序认为分辨率比实际更小。例如,比例为125%时,如果分辨率为1920x1080,最大化窗口的实际大小将为1536x864。当然,如果您从代码控制一些大小和位置,它可能会导致一些问题 现在,我使用下一个值进行定位等: SystemParameters.FullPrimaryScreenWidth和 系统参数。FullPrimaryScreenHeight为“虚拟”(缩放)分辨率 Screen.Primar

我正致力于使应用程序适应自定义DPI值(Windows缩放)

如果我理解正确,缩放会让应用程序认为分辨率比实际更小。例如,比例为125%时,如果分辨率为1920x1080,最大化窗口的实际大小将为1536x864。当然,如果您从代码控制一些大小和位置,它可能会导致一些问题

现在,我使用下一个值进行定位等:

  • SystemParameters.FullPrimaryScreenWidth
    系统参数。FullPrimaryScreenHeight
    为“虚拟”(缩放)分辨率
  • Screen.PrimaryScreen.WorkingArea.Width
    Screen.PrimaryScreen.WorkingArea.Height
    用于原始分辨率
根据这些值,可以很容易地获得缩放值,该值可用于任何定位和大小调整

但所有这些值实际上都是针对主屏幕的。如果我需要对二次屏幕进行定位和调整大小,这可能会有不同的实际(以及不同的“虚拟”)分辨率,该怎么办

现在我的屏幕是这样的

var screen = Screen.FromHandle(new System.Windows.Interop.WindowInteropHelper(Application.Current.MainWindow).Handle);
这允许我使用
WorkingArea
rectangle获得实际分辨率。但“虚拟”解决方案呢?是否有模拟的
系统参数。主屏幕以外的任何屏幕的FullPrimaryScreenWidth


我知道,这个比例是共享的,所以通过获取主屏幕的值,我可以将其用于任何其他屏幕,但我想知道答案,不管怎样,是否有直接变量来获取该值。

您可以使用以下比率

        // calculates text size in that main window (i.e. 100%, 125%,...)
        var ratio = Math.Max(Screen.PrimaryScreen.WorkingArea.Width / SystemParameters.PrimaryScreenWidth,
                        Screen.PrimaryScreen.WorkingArea.Height / SystemParameters.PrimaryScreenHeight);
例如,如果希望在所有屏幕上显示最大化的窗口,则需要使用以下矩形(代码来自App.xaml.cs):

foreach(屏幕中的变量屏幕。所有屏幕)
{
var mainViewModel=container.Resolve();
var窗口=新的主窗口(mainViewModel);
如果(主屏幕)
Current.MainWindow=窗口;
window.Left=screen.WorkingArea.Left/比率;
window.Top=screen.WorkingArea.Top/比率;
window.Width=screen.WorkingArea.Width/比值;
window.Height=screen.WorkingArea.Height/比值;
window.Show();
window.WindowState=WindowState.Maximized;
}

此外,您还可以看看我的帖子,其中提到了在所有屏幕上输出最大化窗口的GitHub示例应用程序。

您可以使用以下比率

        // calculates text size in that main window (i.e. 100%, 125%,...)
        var ratio = Math.Max(Screen.PrimaryScreen.WorkingArea.Width / SystemParameters.PrimaryScreenWidth,
                        Screen.PrimaryScreen.WorkingArea.Height / SystemParameters.PrimaryScreenHeight);
例如,如果希望在所有屏幕上显示最大化的窗口,则需要使用以下矩形(代码来自App.xaml.cs):

foreach(屏幕中的变量屏幕。所有屏幕)
{
var mainViewModel=container.Resolve();
var窗口=新的主窗口(mainViewModel);
如果(主屏幕)
Current.MainWindow=窗口;
window.Left=screen.WorkingArea.Left/比率;
window.Top=screen.WorkingArea.Top/比率;
window.Width=screen.WorkingArea.Width/比值;
window.Height=screen.WorkingArea.Height/比值;
window.Show();
window.WindowState=WindowState.Maximized;
}

此外,您还可以看看我的帖子,其中提到了在所有屏幕上输出最大化窗口的GitHub示例应用程序。

这在WPF应用程序中从未发生过,默认情况下它总是禁用DPI虚拟化。当然,您犯的错误是您忘记了将从Screen类获得的值从像素转换为英寸@不管怎样,主要的问题是如何获得“虚拟”解决方案。这在WPF应用程序中从未发生过,默认情况下它总是禁用DPI虚拟化。当然,您犯的错误是您忘记了将从Screen类获得的值从像素转换为英寸@不管怎样,主要问题是如何获得“虚拟”分辨率。