簡體   English   中英

根據 DPI 調整 WPF 窗口大小

[英]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 有一些限制,這對我的應用程序很重要。

我終於知道我想要什么了。 問題中的描述不清楚:(

我希望應用程序大小(窗口大小以及內容大小)根據屏幕分辨率和縮放比例進行調整,以便我的應用程序在第一次午餐時占據(幾乎)相同的屏幕分區。 永遠不要變得太大而超出屏幕,也不要太小而看不清。

所以我讓我的窗口HeightWidth綁定到

    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

技術-縮放-wpf-應用程序

你誤解的是你正在工作的單位。 在設置容器的寬度時,您不會告訴他例如寬度正好是 500 像素。 當您開始考慮字體時,這完全有道理。 Fontsize 25 在你的顯示器上會很好,但 4 k 顯示器可能是簡約的小和不可讀的。 為了解決這個問題,您將容器設置為 1/96 英寸的標准單位。 您可以修改它,如下所示:

https://docs.microsoft.com/en-us/dotnet/api/system.windows.frameworkelement.width?view=netframework-4.7.2

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM