網(wǎng)站首頁 編程語言 正文
Grid:網(wǎng)格面板
Grid顧名思義就是“網(wǎng)格”,以表格形式布局元素,對于整個面板上的元素進行布局,它的子控件被放在一個一個事先定義好的小格子里面,整齊配列。?Grid和其他各個Panel比較起來,功能最多也最為復(fù)雜。要使用Grid,首先要向RowDefinitions和ColumnDefinitions屬性中添加一定數(shù)量的RowDefinitions和?ColumnDefinitions元素,從而定義行數(shù)和列數(shù)。而放置在Grid面板中的控件元素都必須顯示采用Row和Column附加屬性定義其放置所在的行和列,這兩個屬性的值都是從0開始的索引數(shù),如果沒有顯式設(shè)置任何行或列,Grid將會隱式地將控件加入在第0行第0列。由于Grid的組成并非簡單的添加屬性標記來區(qū)分行列,這也使得用戶在實際應(yīng)用中可以具體到某一單?元格中,所以布局起來就很精細了。?列寬和行高,分別可以在ColumnDefinition、RowDefinition里面指定Width、Height的值。
Grid的單元格可以是空的,一個單元格中可以有多個元素,而在單元格中元素是根據(jù)它們的Z順序一個接著一個呈現(xiàn)的。與Canvas一樣,同一個單元格中?的子元素不會與其他元素交互布局,信息——它們僅僅是重疊而已。
Grid面板將元素分割到不可見的行列網(wǎng)格中。盡管可以在一個單元格中放置多個元素(這時這些元素會相互重疊),但在每個單元格中只放置一個元素通常更合理。當然,在Grid單元格中的元素本身也可能是另一個容器,該容器組織它所包含的一組控件。
注意:盡管Grid面板被設(shè)計成不可見的,但可將Grid.ShowGridLines屬性設(shè)置為True,從而更清晰的觀察Grid面板,方便調(diào)試,可以更準確地控制Grid面板如何選擇列寬和行高。
1、定義一個兩行三列的Grid,在每個單元格里面放置一個Button按鈕
使用XAML代碼實現(xiàn):
注意:如果不知道Grid.Row屬性,Grid面板會假定該屬性的值為0。對于Grid.Column屬性也是如此。因此,在Grid面板的第一個單元格中放置元素時可不指定這兩個屬性值。
2、?調(diào)整行高和列寬
如果Grid面板只是按比例分配尺寸的行和列的集合,它也就沒有什么用處了。為了充分發(fā)揮Grid面板的潛能,可更改每一行和每一列的尺寸設(shè)置方式。
Grid面板支持以下三種設(shè)置尺寸的方式:
名稱 |
說明 |
絕對設(shè)置尺寸方式 |
使用設(shè)備無關(guān)單位準確地設(shè)置尺寸,就是給一個實際的數(shù)字,但通常將此值指定為整數(shù)。這是最無用 的策略,因為這種策略不夠靈活,難以適應(yīng)內(nèi)容大小和容器大小的改變,而且難以處理本地化。 |
自動設(shè)置尺寸方式 |
值為Auto,實際作用就是取實際控件所需的最小值,每行和每列的尺寸剛好滿足需要,這是最有用 的尺寸設(shè)置方式。 |
按比例設(shè)置尺寸方式 |
按比例將空間分割到一組行和列中。這是對所有行和列的標準設(shè)置。通常值為*或N*,實際作用就是取盡可能大的值,當某一列或行被定義為*則是盡可能大,當出現(xiàn)多列或行被定義為*則是代表幾者之間按比例方設(shè)置尺寸。 |
為了獲得最大的靈活性,可混合使用這三種尺寸設(shè)置方式。例如,創(chuàng)建幾個自動設(shè)置尺寸的行,然后通過按比例設(shè)置尺寸的方式讓最后的一行或兩行充滿剩余的空間,這通常是很有用的。
可通過設(shè)置ColumnDefinition對象的Width屬性或者RowDefinition對象的Height屬性來確定尺寸設(shè)置方式。
(1)設(shè)置100設(shè)備無關(guān)單位的絕對寬度:
(2)使用自動尺寸設(shè)置方式,需要使用Auto值
(3)使用按比例尺寸設(shè)置方式,需要使用星號(*)
如果希望不均勻的分割剩余空間,可指定權(quán)重,權(quán)重必須放在星號之前。例如,如果有兩行是按比例設(shè)置尺寸,并希望第一行的高度是第二行高度的一半,那么可以使用如下設(shè)置來分配剩余空間:
使用XAML代碼定義一個3行4列的Grid
??? ??? ??????? ??????? ??????????? ??????????? ??????? ?????????????????? ??????????? ??????????? ??????????? ??????? ??????????? ??????????? ??????? ??????????????? ??????????? ??????????? ??????? 第一行第一列 ???????第二行第一列 ???????第三行第一列 ??????? ??????? ??????? ???
運行效果圖:
3、跨越多行和多列
除了可以使用Row和Column附加屬性在單元格中放置元素,還可以使用另外兩個附加屬性使元素跨越多個單元格,這兩個附加屬性是RowSpan和ColumnSpan。
例如,下面的按鈕將占據(jù)第一行中的第一個和第二個單元格的所有空間:
下面的代碼通過跨越兩行和兩列,拉伸按鈕使其占據(jù)所有4個單元格:
示例
15 6 7 208 119 10 12 1613 14 15 thie is a test 17 18 19
界面運行效果:
4、分割窗口
每個Windows用戶都見過分隔條—能將窗口的一部分與另一部分分類的可拖動分割器。例如,當使用Windows資源管理器時,會看到一系列文件夾(在左邊)和一系列文件(在右邊)。可拖動它們之間的分隔條來確定每部分占據(jù)窗口的比例。
在WPF中,分隔條由GridSplitter類表示,它是Grid面板的功能之一。通過為Grid面板添加GridSplitter對象,用戶就可以改變行和列的尺寸。例如:
界面運行效果:
可以通過拖動中間的分割條,來改變兩列的相對寬度,效果如下圖所示:
注意:為了成功地創(chuàng)建GridSplitter對象,務(wù)必為VerticalAlignment(垂直對齊方式)、HorizontalAlignment(水平對齊方式)以及width屬性(或Height屬性)提供相應(yīng)的屬性值。
理解如何使用GridSplitter類,從而得到所期望的效果需要一定的經(jīng)驗,下面列出幾條指導(dǎo)原則:
- (1)GridSplitter對象必須放在Grid單元格中,可與以及存在的內(nèi)容一并放到單元格中,這時需要調(diào)整邊距設(shè)置,使他們不相互重疊。更好的方法是預(yù)留一列或一行專門用于放置GridSplitter對象,并將預(yù)留行或列的Height或Width屬性的值設(shè)置為Auto。
- (2)GridSplitter對象總是改變整行或整列的尺寸(而非改變單個單元格的尺寸)。為使GridSplitter對象的外觀和行為保持一致,需要拉伸GridSplitter對象使其穿越整行或整列,而不是將其限制在單元格中。為此,可使用RowSpan或ColumnSpan屬性。例如,上面的例子中GridSplitter對象的RowSpan屬性設(shè)置為2,因此被拉伸充滿整列。如果不使用該設(shè)置,GridSplitter對象會顯示在頂行(放置它的行)中,即使這樣,拖動分隔條時也會改變整列的尺寸。
- (3)GridSplitter對象很小不易看見,為了使其更可用,需要為其設(shè)置最小尺寸。在上面的例子中,對于垂直分隔條,需要將VerticalAlignment屬性設(shè)置為Stretch(使分隔條填滿區(qū)域的整個高度),并將Width設(shè)置為固定值。對于水平分隔條,需要設(shè)置HorizontalAlignment屬性來拉伸,并將Height屬性設(shè)置為固定值。
- (4)GridSplitter對齊方式還決定了分隔條是水平的(用于改變行的尺寸)還是豎直的(用于改變列的尺寸)。對于水平分隔條,需要將VerticalAlignment屬性設(shè)置為Center(這也是默認值),以指明拖動分隔條改變上面行和下面行的尺寸。對于垂直分隔條,需要將HorizontalAlignment屬性設(shè)置為Center,以改變分隔條兩側(cè)列的尺寸。
在上面的例子中還包含了一處額外的細節(jié)。在聲明GridSplitter對象時,將ShowPreview屬性設(shè)置為false,因此,當把分隔條從一邊拖到另一邊時,會立即改變列的尺寸。但是如果將ShowPreview屬性設(shè)置為true,當拖到分隔條時就會看到一個灰色的陰影跟隨鼠標指針,用于顯示將在何處進行分割。并且直到釋放了鼠標鍵之后列的尺寸才改變。如果GridSplitter對象獲得了焦點,也可以使用箭頭鍵改變相應(yīng)的尺寸。?
提示:可以改變GridSplitter對象的填充方式,使其不只是具有陰影的灰色矩形。技巧是使用Background屬性應(yīng)用填充,該屬性可以接收簡單的顏色或更復(fù)雜的畫刷。
原文鏈接:https://www.cnblogs.com/dotnet261010/p/6281915.html
相關(guān)推薦
- 2024-03-24 MyBatis-Plus:條件構(gòu)造器Wrapper
- 2022-03-30 ASP.NET?Core使用JWT自定義角色并實現(xiàn)策略授權(quán)需要的接口_實用技巧
- 2022-06-29 RedisTemplate常用操作方法總結(jié)(set、hash、list、string等)_Redis
- 2022-12-09 C++使用標準庫實現(xiàn)事件和委托以及信號和槽機制_C 語言
- 2022-12-01 C/C++細數(shù)宏與函數(shù)有那些區(qū)別_C 語言
- 2023-04-02 go?MethodByName()不能獲取私有方法的解決_Golang
- 2022-05-15 C#內(nèi)置泛型委托之Action委托_C#教程
- 2022-03-19 C++?OpenCV技術(shù)實戰(zhàn)之身份證離線識別_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支