WPF 布局中的共性尺寸組(Shared Size Group)

1. 什么是共性尺寸組?

在 WPF 的 Grid 布局中,SharedSizeGroup 允許多個 Grid 共享同一列或行的尺寸,即使它們屬于不同的 Grid 也能保持大小一致。這樣可以保證界面元素的對齊性,提高布局的一致性。

SharedSizeGroup 主要用于需要多個 Grid 具有相同列寬或行高的情況,比如多行表單、數據展示等。


2. 如何使用 SharedSizeGroup

使用 SharedSizeGroup 需要滿足以下幾個條件:

  1. GridColumnDefinitionRowDefinition 中指定 SharedSizeGroup 名稱。
  2. 所在的 Grid 必須設置 IsSharedSizeScope="True",否則 SharedSizeGroup 不會生效。

示例代碼:

  <StackPanel ><!--  第一個 Grid:顯示姓名  --><Grid Grid.IsSharedSizeScope="True"><Grid.RowDefinitions><RowDefinition Height="Auto" /><RowDefinition Height="Auto" /></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition SharedSizeGroup="GroupA" /><ColumnDefinition Width="Auto" /></Grid.ColumnDefinitions><TextBlockGrid.Column="0"Background="LightBlue"Text="姓名:" /><TextBlockGrid.Column="1"Background="LightGray"Text="張三" /></Grid><!--  第二個 Grid:顯示年齡  --><Grid Grid.IsSharedSizeScope="True"><Grid.RowDefinitions><RowDefinition Height="Auto" /></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition SharedSizeGroup="GroupA" /><ColumnDefinition Width="Auto" /></Grid.ColumnDefinitions><TextBlockGrid.Column="0"Background="LightBlue"Text="年齡:" /><TextBlockGrid.Column="1"Background="LightGray"Text="25" /></Grid></StackPanel>
  • 兩個 Grid 的第一列都設置了 SharedSizeGroup="GroupA",因此無論各自內容多長,它們都會共享同一寬度。
  • 每個 Grid 都設置了 Grid.IsSharedSizeScope="True",保證共享尺寸生效。

3. Grid.IsSharedSizeScope 的作用

IsSharedSizeScope 屬性用于開啟共享尺寸的范圍。只有在設置為 True 后,Grid 內部的 SharedSizeGroup 才會按照定義共享尺寸。如果不設置該屬性,即使列或行定義了 SharedSizeGroup,它們也不會互相同步尺寸。

注意:默認情況下,IsSharedSizeScopeFalse,所以需要手動設置為 True


4. 詳細示例代碼

下面這個示例展示了在一個 StackPanel 中有兩個 Grid,并且這兩個 Grid 的第一列寬度保持一致:

 <StackPanel Grid.IsSharedSizeScope="True"><!--  第一個 Grid:顯示產品名稱  --><Grid><Grid.ColumnDefinitions><ColumnDefinition SharedSizeGroup="GroupA" /><ColumnDefinition Width="Auto" /></Grid.ColumnDefinitions><TextBlockGrid.Column="0"Background="LightBlue"Text="產品名稱:" /><TextBlockGrid.Column="1"Background="LightGray"Text="蘋果手機" /></Grid><!--  第二個 Grid:顯示價格  --><Grid><Grid.ColumnDefinitions><ColumnDefinition SharedSizeGroup="GroupA" /><ColumnDefinition Width="Auto" /></Grid.ColumnDefinitions><TextBlockGrid.Column="0"Background="LightBlue"Text="價格:" /><TextBlockGrid.Column="1"Background="LightGray"Text="5000元" /></Grid></StackPanel>
  • 兩個 Grid 中的第一列都屬于 SharedSizeGroup="GroupA",因此這兩列會共享相同的寬度。
  • 不論各自的文本內容如何變化,第一列的寬度始終保持一致。

5. 注意事項與適用場景

(1)SharedSizeGroup 僅適用于 Auto 尺寸的行或列

SharedSizeGroup 只能應用于 Width="Auto"Height="Auto" 的情況,不能用于使用 *(星號)分配尺寸的 ColumnDefinitionRowDefinition

錯誤示例:

<ColumnDefinition SharedSizeGroup="GroupB" Width="*" />  <!-- 無效 -->

(2)適用場景

  • 表單布局:確保多個表單項的標簽列寬一致,提高界面美觀。
  • 數據列表:在多 Grid 布局的情況下,保持同一列寬度一致性,便于閱讀和比較。
  • 動態調整界面:當界面布局需要根據內容動態變化時,使用共享尺寸組可保證整體對齊。

(2)SharedSizeGroup 僅適用于 Auto 尺寸的行或列

錯誤示例:

<Grid Grid.IsSharedSizeScope="True" ShowGridLines="True"><Grid.RowDefinitions><RowDefinition SharedSizeGroup="GroupA" /><RowDefinition /></Grid.RowDefinitions><TextBlockMargin="80"Background="Red"Text="33333dd3333333333333333333333333333333333333333333333" /><Grid Grid.IsSharedSizeScope="True" ShowGridLines="True"><Grid.RowDefinitions><RowDefinition SharedSizeGroup="GroupA" /><RowDefinition /></Grid.RowDefinitions><TextBlockGrid.Row="0"Margin="0,50,0,0"Background="DarkBlue"Text="333333333333333333333333333" /></Grid>
</Grid>

外層 Grid

  • ?Grid.IsSharedSizeScope="True"開啟了共享尺寸組作用域,這意味著在這個 Grid 內部,設置了同一 SharedSizeGroup 名稱的行或列將會共享尺寸。

內層 Grid

  • Grid.IsSharedSizeScope="True"內層 Grid 同樣開啟了共享尺寸組作用域,但要注意:由于它是嵌套在外層 Grid 內部,默認情況下內層 Grid會擁有獨立的共享尺寸作用域。也就是說,外層 Grid 中的 GroupA 與內層 Grid 中的 GroupA 不會相互影響,除非它們在同一個共享尺寸作用域中。

關鍵點與注意事項

  • 共享尺寸作用域(IsSharedSizeScope)

    外層和內層 Grid 都設置了 Grid.IsSharedSizeScope="True"。不過,它們分別擁有自己的共享尺寸作用域,因此外層 Grid 中的 GroupA 與內層 Grid 中的 GroupA 不會共享尺寸。如果你的目的是讓內外層的行共享同一尺寸,需要將它們置于同一個作用域中(例如,把它們作為同一父容器的直接子元素,并在父容器上設置 IsSharedSizeScope="True")。

6. 總結

功能實現方式
讓多個 Grid 共享同一列/行的尺寸ColumnDefinitionRowDefinition 中設置 SharedSizeGroup 屬性
啟用共享尺寸功能設置 Grid.IsSharedSizeScope="True"
使用限制僅適用于 Auto 尺寸的行或列

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/72911.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72911.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72911.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Netty源碼—2.Reactor線程模型二

大綱 1.關于NioEventLoop的問題整理 2.理解Reactor線程模型主要分三部分 3.NioEventLoop的創建 4.NioEventLoop的啟動 4.NioEventLoop的啟動 (1)啟動NioEventLoop的兩大入口 (2)判斷當前線程是否是NioEventLoop線程 (3)創建一個線程并啟動 (4)NioEventLoop的啟動總結 (…

前端項目中應該如何選擇正確的圖片格式

在前端項目中選擇正確的圖片格式是優化頁面性能、提升用戶體驗的關鍵步驟之一。以下是常見圖片格式的特點、適用場景及選擇建議&#xff0c;幫助你在不同場景下做出最優決策&#xff1a; 一、常見圖片格式對比 格式特點適用場景不適用場景JPEG- 有損壓縮&#xff0c;文件小- 不…

保姆級 STM32 HAL 庫外部中斷教學

1. 外部中斷概述 為什么用外部中斷&#xff1f; 當按鍵按下時&#xff0c;CPU 無需輪詢檢測引腳狀態&#xff0c;而是通過中斷機制立即響應&#xff0c;提高效率&#xff0c;適用于實時性要求高的場景。 關鍵概念 EXTI (External Interrupt/Event Controller)&#xff1a;ST…

Postman高級功能深度解析:Mock Server與自動化監控——構建高效API測試與監控體系

引言&#xff1a;Postman在API開發中的核心價值 在數字化時代&#xff0c;API&#xff08;應用程序編程接口&#xff09;已成為系統間交互的“神經網絡”&#xff0c;其質量直接影響用戶體驗與業務連續性。然而&#xff0c;傳統API測試面臨兩大挑戰&#xff1a; 開發階段依賴…

【程序人生】成功人生架構圖(分層模型)

文章目錄 ?前言?一、根基層——價值觀與使命?二、支柱層——健康與能量?三、驅動層——學習與進化?四、網絡層——關系系統?五、目標層——成就與財富?六、頂層——意義與傳承?外層&#xff1a;調節環——平衡與抗風險?思維導圖 標題詳情作者JosieBook頭銜CSDN博客專家…

【最后203篇系列】020 rocksdb agent

今天還是挺開心的一天&#xff0c;又在工具箱里加了一個工具。嗯&#xff0c;但是快下班的時候也碰到一些不太順心的事&#xff0c;讓我有點惱火。我還真沒想到一個專職的前端&#xff0c;加測試&#xff0c;以及其他一堆人&#xff0c;竟然不知道后端返回的markdown,在前端渲染…

10-- 網絡攻擊防御原理全景解析 | 從單包攻防到DDoS軍團作戰(包你看一遍全記住)

&#x1f6e1;? 網絡攻擊防御原理全景解析 | 從單包攻防到DDoS軍團作戰 如果你也對網絡工程師的內容感興趣的話&#xff0c;歡迎看我的最新文章9–BGP路由黑洞&#xff08;超萬字大解析&#xff09;&#xff1a;網絡世界的“百慕大三角“逃生指南(BGP路由配置實驗含路由黑洞,…

解鎖Python print()函數高級用法

print() 是 Python 中最常用的函數之一,用于將內容輸出到控制臺。雖然它的基本用法非常簡單,但 print() 函數還支持許多高級功能,如格式化輸出、重定向輸出、控制分隔符和結束符等。 1. print() 函數的基本用法 1.1 語法 print() 函數的基本語法如下: print(*objects, …

鬼泣:動作系統3

文章目錄 self-Tag&#xff1a;可以直接在游戲運行時通過標簽區分不同Actorsolid隔離&#xff1a;模塊化低耦合&#xff1a;將功能拆分成多個模塊&#xff0c;修改單一模塊時無需修改其他模塊 動作優先級&#xff1a;當前動作能否打斷上一動作函數不能使用timelineset timer by…

Polymer入門指南:從零開始構建、組織、管理Web Component

前言 Web Component是一種強大的技術&#xff0c;它允許開發者創建可重用的自定義元素&#xff0c;其功能和樣式都與原生HTML元素類似。Polymer是一個用于創建Web Component的庫&#xff0c;簡化了開發過程。今天我們將一起來了解如何基于Polymer開發Web Component。 什么是P…

廣度優先搜索(BFS) vs 深度優先搜索(DFS):算法對比與 C++ 實現

目錄 一、BFS 和 DFS 的核心思想 1. BFS&#xff08;廣度優先搜索&#xff09; 2. DFS&#xff08;深度優先搜索&#xff09; 二、BFS 和 DFS 的對比 三、C 代碼實現 1. BFS 實現&#xff08;鄰接表表示的無向圖&#xff09; 2. DFS 實現&#xff08;遞歸與迭代兩種方式&…

vulhub靶機----基于docker的初探索,環境搭建

環境搭建 首先就是搭建docker環境&#xff0c;這里暫且寫一下 #在kali apt update apt install docker.io配置docker源&#xff0c;位置在/etc/docker/daemon.json {"registry-mirrors": ["https://5tqw56kt.mirror.aliyuncs.com","https://docker…

第7章 類與面向對象

6-1 二維平面上的點操作&#xff08;Python3&#xff09; 題目描述 設計一個表示二維平面上點的類 Point。該類應該包含以下功能&#xff1a; 兩個私有屬性 _x 和 _y&#xff0c;分別表示點的橫坐標和縱坐標。 一個構造函數 __init__&#xff0c;用于初始化點的坐標。 一個…

算法訓練篇06--力扣611.有效三角形的個數

目錄 1.題目鏈接&#xff1a;611.有效三角形的個數 2.題目描述&#xff1a; 3.解法一&#xff1a;(暴力解法)(會超時)&#xff1a; 4.解法二(排序雙指針) 1.題目鏈接&#xff1a;611.有效三角形的個數 2.題目描述&#xff1a; 給定一個包含非負整數的數組 nums &#xf…

網絡編程之解除udp判斷客戶端是否斷開

思路&#xff1a;每幾秒發送一條不顯示的信息&#xff0c;客戶端斷開則不再發送信息&#xff0c;超時則表示客戶端斷開連接。&#xff08;心跳包&#xff09; 服務器 #include <head.h>#define MAX_CLIENTS 100 // 最大支持100個客戶端 #define TIMEOUT 5 // 5秒…

Python Cookbook-4.8 二維陣列變換

任務 需要變換一個列表的列表&#xff0c;將行換成列&#xff0c;列換成行。 解決方案 需要一個列表&#xff0c;其中的每一項都是同樣長度的列表&#xff0c;像這樣 arr [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]列表推導提供了簡單方便的方法以完成二維陣列的轉換: print …

B樹與B+樹在MySQL中的應用:索引

數據結構演示網站&#xff1a;Data Structure Visualization 先來了解兩個數據結構B樹與B樹 B樹&#xff1a; N階B樹每個節點最多存儲N-1個Key&#xff0c;N個指針 例如&#xff1a;一個5階B樹&#xff0c;當前節點存儲到5個Key時&#xff0c;中間的數會向上分離&#xff0c;…

【重構小程序】基于Tika和Langchain4J進行文件解析和文本切片(二)

為了將大語言模型植入到小程序中&#xff0c;來支持用戶的問答。那我們首先需要做的是什么呢&#xff0c;不是引入大語言模型&#xff0c;而且為大語言模型搭建一個私有化知識庫&#xff0c;但是這是這節呢&#xff0c;我們先不搭建私有化知識庫&#xff0c;在這之前&#xff0…

python|exm6-1try-except結構|raise關鍵字|異常類型

目錄 一、try-expect 1. 多個try-expect結構的使用 1.1 捕捉特定異常 1.2 捕捉全部異常 1.3 所有異常合并處理 2. try-except-else-finally 結構 二、raise 關鍵字 一、try-expect try-expect 結構是 Python 中用于異常處理的關鍵機制。它允許你捕獲并處理代碼中可能發生…

小藍的括號串1(棧,藍橋云課)

問題描述 小藍有一個長度為 nn 的括號串&#xff0c;括號串僅由字符 ( 、 ) 構成&#xff0c;請你幫他判斷一下該括號串是否合法&#xff0c;合法請輸出 Yes &#xff0c;反之輸出 No 。 合法括號序列&#xff1a; 空串是合法括號序列。 若 ss 是合法括號序列&#xff0c;則 (…