2011-12-11 38 views
-1

我開發了一個使用Silverlight的網頁。當我試圖找回我的電腦的屏幕分辨率使用C#代碼(它被設置爲1366×768),使用HtmlPage.Window.Eval(「screen.width」)檢索不正確的屏幕分辨率。ToString()

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

是什麼這背後的原因是什麼?

回答

1

嘗試這樣的:

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

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

現在顯示爲不同的屏幕分辨率(1366 X 666),但仍是不正確的屏幕分辨率 – Prem

+0

102像素,菜單+狀態欄似乎並不奇怪。 –

0

因爲這不是你想了解的屏幕尺寸,而不是窗口的大小,你可以使用SystemParameters.PrimaryScreenWidthSystemParameters.PrimaryScreenHeight

您可能還會發現使用窗口尺寸SystemParameters.WindowCaptionHeight,SystemParameters.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;