【问题标题】:WPF Screen ResolutionWPF 屏幕分辨率
【发布时间】:2018-11-21 21:23:43
【问题描述】:

我一直在开发 WPF 桌面应用程序,并根据特定的屏幕分辨率制作图形。我需要根据屏幕分辨率缩放所有边距。我怎样才能做到这一点?

【问题讨论】:

标签: wpf


【解决方案1】:

你可以使用:

System.Windows.SystemParameters.PrimaryScreenWidth;
System.Windows.SystemParameters.PrimaryScreenHeight;

搜索一下 :)

【讨论】:

  • 是的,我这样做了,但是我将如何调整边距。例如: 是为 1366x768 设计的。但是这个边距将被设置为独立于分辨率的所有屏幕。如果这是一个有效的问题并且有意义的话,我需要回答这个问题
  • @yshooooo 在这种情况下,您最好查找 Grid.RowDefinitions 和 ColumnDefinitions
  • 所以你的意思是,如果文本块的宽度为 30,那么我应该创建一个网格并将其 ColumnDefinitions 定义为 1* 和 2*。我想这将是很多工作,而且我无法达到所有定义的准确性。没有别的办法吗?
  • @yshooooo 你想调整文本框之间的边距或者在分辨率改变时改变?
  • 想调整页边距。但如果你能同时给出答案,那将是一个加分项
【解决方案2】:

要得到Screen Resolutions,我们必须使用系统的dpi因子值,使用下面的代码this article(请阅读完整的理解):

using System.Windows.Media;


Window mainWindow = Application.Current.MainWindow;
PresentationSource mainWindowPresentationSource = PresentationSource.FromVisual(mainWindow);
Matrix m = mainWindowPresentationSource.CompositionTarget.TransformToDevice;
double dpiWidthFactor = m.M11;
double dpiHeightFactor = m.M22;
double ScreenHeight = SystemParameters.PrimaryScreenHeight * dpiHeightFactor; //calculated correct value
double ScreenWidth = SystemParameters.PrimaryScreenWidth * dpiWidthFactor; //calculated correct value

【讨论】:

  • mainWindowPresentationSource 对我来说始终为空 - 为什么?
  • @MarkRichman 您的 MainWindow 对象应该在调用此代码之前加载,我认为这就是您得到 null 的原因。加载完成后,尝试将代码放入 Window.Loded 事件或其他事件中。
【解决方案3】:

添加对 :- System.Windows.Forms 的引用

var width = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    相关资源
    最近更新 更多