使用HtmlPage.Window.Eval(“screen.width”)检索不正确的屏幕分辨率.ToString()

时间:2011-12-11 10:15:20

标签: c# silverlight

我使用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。

这背后的原因是什么?

2 个答案:

答案 0 :(得分:1)

试试这样:

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

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

答案 1 :(得分:0)

由于这不是您想要了解的屏幕尺寸,而不是窗口尺寸,因此您可以使用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;