[英]Adjust WPF window size based on DPI
我正在開發一個窗口大小為 1200*932 的 WPF 應用程序,包括標題欄。
它在我的桌面顯示器上顯示良好(2560*1440,縮放比例為 125%),實際大小為 1500*1165。
但是,當我在筆記本電腦(2736*1824,縮放比例為 200%)上運行它時,實際大小為 2400*1864,這太大了。
如何處理? 我的意思是動態?
編輯:
最初的問題可能不清楚。 對不起。
我想做的就像 UWP 應用程序的工作方式。 在我的桌面上,UWP應用默認窗口大小是1500*1165(可能是1200*932*125%); 在筆記本電腦上,窗口大小為 2048*1600(可能為 1024*800 *200%)。
UWP 是否默認提供該功能? WPF可以這樣做嗎? 也許以編程方式,我想。
為什么不使用 UWP:我發現 UWP 在某種沙箱中運行。 Network 有一些限制,這對我的應用程序很重要。
我終於知道我想要什么了。 問題中的描述不清楚:(
我希望應用程序大小(窗口大小以及內容大小)根據屏幕分辨率和縮放比例進行調整,以便我的應用程序在第一次午餐時占據(幾乎)相同的屏幕分區。 永遠不要變得太大而超出屏幕,也不要太小而看不清。
所以我讓我的窗口Height
和Width
綁定到
public double ReSizeWidth
{
get
{
return ((float)SystemParameters.VirtualScreenWidth) * (1500f / 2560f);
// 1500f / 2560f is the percentage
}
}
public double ReSizeHeight
{
get
{
return ReSizeWidth * 0.75f + 32;
// keep the window aspect ratio
}
}
並將其添加到最外面的Grid
<Grid.LayoutTransform>
<ScaleTransform CenterX="0"
CenterY="0"
ScaleX="{Binding ElementName=myMainWindow, Path=ScaleValue}"
ScaleY="{Binding ElementName=myXMainWindow, Path=ScaleValue}"/>
</Grid.LayoutTransform>
背后的代碼
public double ScaleValue
{
get
{
return ReSizeWidth / 1200;
// 1200 is the design height
}
}
雖然它有效,但我認為它可能會導致一些不好的效果,比如模糊或混疊。 我認為應該有一個內置函數或其他東西來實現這一點。
如果您想更改應用程序窗口的大小,只需使用此鏈接: WPF 窗口大小和此wpf-windows-overview#window-size
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
SizeToContent="WidthAndHeight">
但我認為您正在 WPF 應用程序中尋找 DPi 集成,請查看他的鏈接以獲取更多信息
https://docs.microsoft.com/en-us/windows/desktop/hidpi/declaring-managed-apps-dpi-aware
你誤解的是你正在工作的單位。 在設置容器的寬度時,您不會告訴他例如寬度正好是 500 像素。 當您開始考慮字體時,這完全有道理。 Fontsize 25 在你的顯示器上會很好,但 4 k 顯示器可能是簡約的小和不可讀的。 為了解決這個問題,您將容器設置為 1/96 英寸的標准單位。 您可以修改它,如下所示:
qualifiedDouble 如上所述的雙精度值,后跟以下單元聲明字符串之一:px、in、cm、pt。
px(默認)是與設備無關的單位(每單位 1/96 英寸)
in 是英寸; 1in==96px
cm是厘米; 1cm==(96/2.54) 像素
pt 是點數; 1pt==(96/72) 像素
Auto 啟用自動調整大小行為。 見備注。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.