使用HtmlPage.Window.Eval("screen.width"). tostring()

本文关键字:quot HtmlPage tostring width screen Eval Window 使用 | 更新日期: 2023-09-27 18:17:24

我用Silverlight开发了一个网页。当我试图使用c#代码检索PC的屏幕分辨率(设置为1366 X 768)时,

void MainPage_Loaded(object sender, RoutedEventArgs e)
{
     string width = HtmlPage.Window.Eval("screen.width").ToString();
     string Height = HtmlPage.Window.Eval("screen.height").ToString();            
}

显示不正确的屏幕分辨率,为1024 X 768。

这背后的原因是什么?

使用HtmlPage.Window.Eval("screen.width"). tostring()

试试:

 var width = HtmlPage.Window.Eval("screen.availWidth");
 var height = HtmlPage.Window.Eval("screen.availHeight");

因为这不是你想知道的屏幕大小,也不是窗口大小,你可以使用SystemParameters.PrimaryScreenWidthSystemParameters.PrimaryScreenHeight

您可能还会发现对窗口的大小、SystemParameters.WindowCaptionHeightSystemParameters.ResizeFrameHorizontalBorderHeightSystemParameters.ResizeFrameVerticalBorderWidth进行一些计算是有用的。

所有这些都适用于标准窗口,如果你使用'ToolWindow' WindowStyle,你可能需要其他值

请注意,根据不同的操作系统(至少是windows XP和windows Vista),所提供的数字可能是"奇怪的",因为它们是用我有时发现很难理解的DPI参数进行缩放的(在windows Vista上,我开发了一个针对windows XP的程序,两者的行为不一样)。当然:如果你有一个宽屏幕(这是你的情况),DPI参数在windows和Vista上是自动改变的,而不是默认的96 DPI。要解决这些问题,请查看PresentationSource及其成员CompositionTarget

下面的代码会给你真实的坐标/尺寸,而不是那些由DPI设置改变的。

var PS = PresentationSource.FromVisual(MyWindow);
var realX = myX* PS.CompositionTarget.TransformToDevice.M11;
var realY = myY* PS.CompositionTarget.TransformToDevice.M22;