使用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。
这背后的原因是什么?
试试:
var width = HtmlPage.Window.Eval("screen.availWidth");
var height = HtmlPage.Window.Eval("screen.availHeight");
因为这不是你想知道的屏幕大小,也不是窗口大小,你可以使用SystemParameters.PrimaryScreenWidth
和SystemParameters.PrimaryScreenHeight
您可能还会发现对窗口的大小、SystemParameters.WindowCaptionHeight
、SystemParameters.ResizeFrameHorizontalBorderHeight
和SystemParameters.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;