我會發現,在WPF下面的代碼的解決方案:
WPF中的屏幕分辨率問題?
double height = System.Windows.SystemParameters.PrimaryScreenHeight;
double width = System.Windows.SystemParameters.PrimaryScreenWidth;
目前我的屏幕分辨率是1920 * 1200,但height
是960.0和width
爲1536.0!
它有什麼問題?
在此先感謝。
我會發現,在WPF下面的代碼的解決方案:
WPF中的屏幕分辨率問題?
double height = System.Windows.SystemParameters.PrimaryScreenHeight;
double width = System.Windows.SystemParameters.PrimaryScreenWidth;
目前我的屏幕分辨率是1920 * 1200,但height
是960.0和width
爲1536.0!
它有什麼問題?
在此先感謝。
請記住,所有WPF位置和大小均爲1/96英寸單位的浮點數。不是像素。這使得你的窗口設計獨立解析。做數學運算:高度= 960/96 = 10英寸。將視頻適配器設置爲120 DPI(120/96 = 125%):10 * 120 = 1200像素。寬度相同:1536/96 * 120 = 1920像素。
System.Windows.Forms以像素爲單位工作。因爲它減去任務欄的高度,所以高度小於1050。但對於WPF你總是希望有1/96" 的工作,從未像素。
嘗試SystemParameters.FullPrimaryScreenWidth和FullPrimaryScreenHeight,我相信PrimaryScreenWidth和高度在屏幕上移除任務欄和其他deskbands後返回可用客戶端窗口的大小。
嘗試these..i相信這會糾正錯誤.....
System.Windows.Form1.Screen.PrimaryScreen .Bounds.Height; System.Windows.Form1.Screen.PrimaryScreen.Bounds.Widtht;
對於更強大的實現,您應該計算系統上的DPI因子並使用這些因子,正常的DPI值是96,但某些監視器可能有不同的值。請考慮您的代碼可能在具有與96不同的DPI值的監視器上運行。請考慮以下代碼:
private static void CalculateDpiFactors()
{
Window MainWindow = Application.Current.MainWindow;
PresentationSource MainWindowPresentationSource = PresentationSource.FromVisual(MainWindow);
Matrix m = MainWindowPresentationSource.CompositionTarget.TransformToDevice;
thisDpiWidthFactor = m.M11;
thisDpiHeightFactor = m.M22;
}
然後可以使用這些比率,以獲得最終值:
CalculateDpiFactors();
double ScreenHeight = SystemParameters.PrimaryScreenHeight * thisDpiHeightFactor;
double ScreenWidth = SystemParameters.PrimaryScreenWidth * thisDpiWidthFactor;
ScreenHeight和屏幕寬度的值應匹配,那麼你在你的顯示器的屬性窗口中看到的。
這很好,但你事先有一個窗口。如何計算DPI沒有窗口?它應該是可能的 - dpi是桌面的屬性,而不僅僅是窗口。 – greenoldman 2010-10-21 07:49:40
謝謝你,這是非常有益的。 – 2015-12-16 12:01:40
似乎有一些代碼與此相關:https://www.mesta-automation.com/tecniques-scaling-wpf-application/ – Beachwalker 2017-03-27 12:12:45
如果選中「使用Windows XP樣式DPI縮放」,則返回的「Screen.PrimaryScreen.Bounds」值是正確的。如果不是,則返回值按比例縮小DPI值(這是默認值)。
要找到「使用Windows XP樣式DPI縮放」複選框,依次展開「要在程序更清晰的文本和屏幕上的項目未設計爲高DPI」鏈接在下面的鏈接: http://windows.microsoft.com/en-us/windows-vista/Make-the-text-on-your-screen-larger-or-smaller
僅供參考:該鏈接現在自動轉到Windows 8.x解釋,而不是XP/VISTA/Win7的 – 2014-02-12 23:18:01
請在窗口加載完成後打電話給我。
public static class Ext
{
public static Size GetNativePrimaryScreenSize(this Window window)
{
PresentationSource mainWindowPresentationSource = PresentationSource.FromVisual(window);
Matrix m = mainWindowPresentationSource.CompositionTarget.TransformToDevice;
var dpiWidthFactor = m.M11;
var dpiHeightFactor = m.M22;
double screenHeight = SystemParameters.PrimaryScreenHeight * dpiHeightFactor;
double screenWidth = SystemParameters.PrimaryScreenWidth * dpiWidthFactor;
return new Size(screenWidth, screenHeight);
}
}
我測試過了,結果和我的第一篇文章一樣! – 2010-02-10 11:15:07
好吧,這很奇怪。如果您從控制面板更改屏幕分辨率,會發生什麼情況? – 2010-02-10 11:28:41
我將分辨率更改爲1680 * 1050,結果爲:height = 1002.0;寬度= 1680.0。順便說一句:新聞部是125% – 2010-02-10 11:59:51