首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WPF 完美佈局不留白:自定義 FillWrapPanel 解決 WrapPanel 右側留白問題

     編輯:關於.NET

優秀介面設計原則:充分利用空間。預設 WrapPanel 作為 ListBox.ItemsPanel 時,右側常出現大片留白,視覺不協調。

問題對比

原生 WrapPanel 留白:

留白問題

期望效果:Item 寬度自動調節填滿:

填滿效果1

填滿效果2

為何不用 UniformGrid?

  • 固定行列數(如 3×6)可用 UniformGrid
  • 但 WrapPanel 特色是動態根據寬度調整每行項目數,UniformGrid 無法做到

動態換行

自定義 FillWrapPanel 實作

類別圖

核心邏輯:

  1. 計算每行可放置項目數
  2. 計算每個項目寬度 = 可用寬度 / 每行數
  3. 安排佈局

Item 使用規範

  1. 不設寬度/最小/最大寬度:由 FillWrapPanel 統一控制
  2. 支援縮放:Item 內部佈局(除 TextBlock 外)不設固定寬高,隨容器縮放自適應

關於自定義 Panel 的設計哲學

有人問:能否合併「可縮放 Panel」與「Wrap Panel」成無敵 Panel?

原則:在特定規則約束下,介面大小能唯一決定所有項目佈局(大小+位置)。若規則過於複雜需大量文檔/範例保證正確使用,該 Panel 多半會被閒置。

最佳實踐:多個 Panel 組合 實現複雜功能,而非單一超級 Panel。符合軟體設計模式基本要求,也最自然優美。

FloorItemWidth 屬性

設定項目寬度是否取整數。非整數寬度會導致 TextBlock、Image 等內容模糊,建議啟用。

本文配套完整原始碼可供下載,歡迎實作驗證。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved