我使用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。
这背后的原因是什么?
答案 0 :(得分:1)
试试这样:
var width = HtmlPage.Window.Eval("screen.availWidth");
var height = HtmlPage.Window.Eval("screen.availHeight");
答案 1 :(得分:0)
由于这不是您想要了解的屏幕尺寸,而不是窗口尺寸,因此您可以使用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;