網格與畫布
我正在尋找關於在 WPF 中使用 Canvas 與 Grid 面板的意見。我需要製作具有基本網格佈局的經典輸入表單,有些可能內部有小數據網格、組框,但都在網格佈局中對齊。我正在為我的所有表單使用網格還是畫布面板而苦苦掙扎。網格給了我良好的結構;我可以更輕鬆地保持控制項的對齊方式。我將為所有視窗提供基類(繼承 Window 類),因此 Visual Studio 中的設計器將毫無用處,因為它存在這種繼承的問題,並且使用 Grid 面板我什至不需要設計器,我可以設置視窗 SizeToContent 以便一切正常。但是再次使用 Canvas,我能夠以任何我喜歡的方式定位控制項,這是我在使用 Canvas 時看到的唯一好處。
我在 WPF 方面沒有太多經驗來預測我可以從客戶對佈局的請求中得到什麼樣的問題。在 web 表單上,我有時會使用絕對定位來處理表單,以防客戶有一些“特殊”要求,無論是在較高的位置上控制像素還是在右側或左側等。每個與要求苛刻的客戶一起工作的人都知道我的意思。
我想看看您的想法,在業務應用程序表單佈局建構中兩者的優缺點是什麼?為什麼一個比另一個好?在任何情況下,一個面板會不好使用,而另一個則不會?一個面闆對另一個面板有什麼缺點?你會用什麼面板?
謝謝
Canvas 主要用於自定義繪圖功能,而不是其他任何東西。網格絕對是自定義佈局的最佳選擇。
您可以深入了解網格的實際佈局、列/行跨度、寬度、高度等。
在我看來,通過控制行和列 sizez 在網格上進行各種項目的佈局比將所有內容硬編碼到畫布中更容易。如果他們決定在以後更改決議,這也會使事情變得更容易。
來自 Adam Nathan 的WPF Unleashed(第 168 頁):
使用網格模擬畫布 如果您將網格保留為單行和單列,並將所有子項的 HorizontalAlignment 和 VerticalAlignment 設置為 Stretch 以外的值,則子項將像 Canvas 一樣添加到單個單元格中。將 HorizontalAlignment 設置為 Left 並將 VerticalAlignment 設置為 Top 就像將 Canvas.Left 和 Canvas.Top 設置為 0。將 HorizontalAlignment 設置為 Right 和 VerticalAlignment 設置為 Bottom 就像將 Canvas.Right 和 Canvas.Bottom 設置為 0 一樣。此外,將 Margin 值應用於每個元素可以給您與將 Canvas 的附加屬性設置為相同值相同的效果。
您還可以利用網格中控制項的內容來獲得創意,以獲得更精細的佈局控制。
畫布適用於像對話框這樣很少改變大小並且只有幾個控制項的東西,因為隨著數量的增加將它們全部佈置出來會很耗時。
我個人自己使用網格。將事物佈置到像素級別可能需要更多的工作,但在 5% 的必要時間內,抽象掉很多麻煩是值得的。當需要動態調整行和列的大小時,它也很不錯,GridSplitter 讓這一切變得輕而易舉。