Dot-Net

字型大小獨立的 UI:當我切換到 120 DPI 時一切都壞了?

  • November 22, 2009

所以我正在閱讀另一個問題中有人連結到的那些 Windows Vista UI 指南,他們提到你應該能夠在切換到 120 DPI 後倖存下來。好吧,我在安裝了我的應用程序的情況下啟動了我方便的虛擬機,我們得到了什麼……啊啊!!!大規模使用者界面失敗!

一切都亂七八糟:有些容器不夠大,無法容納它們的文字;一些“彼此相鄰”定位的控制項現在都擠在一起/分開了;有些按鈕不夠高;我的ListView專欄不夠寬… eeek。

這聽起來像是一種完全不同的方法。我之前的一個基本上是使用 VS2008 Windows 窗體設計器來創建,我猜是基於像素的佈局。我可以看到,如果我堅持使用 Windows 窗體,FlowLayoutPanels 會很有幫助,儘管我過去發現它們相當不靈活。它們也不能解決容器(例如表單本身)不夠大的問題;大概有辦法做到這一點?也許是那個AutoSize屬性?

這也可能表明是時候跳槽到 WPF 了。我的印像是它是專門為這種事情設計的。

基本問題似乎歸結為這些:

  • 如果我要堅持使用 Windows 窗體,那麼實現與字型大小無關的佈局的所有技巧是什麼,這種佈局可以在使用者設置大字型或將顯示設置為 120 DPI 時存活下來?
  • WPF 在這方面是否具有顯著優勢,如果是,您能否嘗試說服我值得轉換?
  • 在 .NET 堆棧中或一般情況下,是否存在與字型大小無關的佈局的一般“最佳實踐”?

了解AnchorDock屬性如何在您的控制項上工作,留下任何可以自動調整大小的東西,並儘可能使用TableLayoutPanel

如果你做到了這三件事,你將獲得很多 Windows 窗體中的 WPF 設計經驗。精心設計TableLayoutPanel的控制項會盡最大努力調整控制項的大小,以使它們適合表單。結合AutoSize控制項、停靠和 Soeren Kuklau 提到的AutoScaleMode,您應該能夠製作出可以很好縮放的東西。如果沒有,您的表單上可能有太多控制項;考慮將其拆分為標籤頁、浮動工具箱或其他一些空間。

在 WPF 中這要容易得多,因為自動調整大小控制項的概念是內置的;在大多數情況下,如果您使用座標對放置 WPF 元素,那麼您做錯了。儘管如此,您仍然無法改變這樣一個事實,即在較低解析度下,填充螢幕不需要太多 120 dpi 文本。有時問題不是你的佈局,而是試圖在一個小空間裡放太多東西。

引用自:https://stackoverflow.com/questions/50528