高DPIディスプレイのノートと普通のディスプレイでデュアルディスプレイを設定しているような場合、wpfアプリでscreenのサイズが直感どおりに使えなかったのでメモ
環境例
例えば上記の高DPIディスプレイノートをprimalyディスプレイとして、普通のディスプレイをその右側に配置する。
左側:ノートのディスプレイサイズは横幅1920 縦幅1080(ディスプレイ1)
右側:据え置きディスプレイが横幅2880 縦幅1800(ディスプレイ2)
したいこと
あるwindowを「ディスプレイ2」の左端ピッタリに表示させたい。
方法としては、「ディスプレイ2」の左端の位置を取得し、window.Leftへセットすれば出来ると思ったが、
window.Left = System.Windows.Forms.Screen.AllScreens[1].WorkingArea.Left
上記環境の場合は「ディスプレイ2」の左橋から右へだいぶズレたところに表示されてしまう。
対策
正しくセットするには、DPI仮想化の比率を取得し、計算してやる必要がある。
double dpi仮想化比率 = PresentationSource.FromVisual(window).CompositionTarget.TransformFromDevice.M11;// DPI仮想化の比率を取得。参考にした)http://james-ramsden.com/c-get-dpi-screen/ window.Left = System.Windows.Forms.Screen.AllScreens[1].WorkingArea.Left * dpi仮想化比率
これで、意図通りに表示できた。