<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Grid顧名思義就是“網格”,以表格形式佈局元素,對於整個面板上的元素進行佈局,它的子控制元件被放在一個一個事先定義好的小格子裡面,整齊配列。 Grid和其他各個Panel比較起來,功能最多也最為複雜。要使用Grid,首先要向RowDefinitions和ColumnDefinitions屬性中新增一定數量的RowDefinitions和 ColumnDefinitions元素,從而定義行數和列數。而放置在Grid面板中的控制元件元素都必須顯示採用Row和Column附加屬性定義其放置所在的行和列,這兩個屬性的值都是從0開始的索引數,如果沒有顯式設定任何行或列,Grid將會隱式地將控制元件加入在第0行第0列。由於Grid的組成並非簡單的新增屬性標記來區分行列,這也使得使用者在實際應用中可以具體到某一單 元格中,所以佈局起來就很精細了。 列寬和行高,分別可以在ColumnDefinition、RowDefinition裡面指定Width、Height的值。
Grid的單元格可以是空的,一個單元格中可以有多個元素,而在單元格中元素是根據它們的Z順序一個接著一個呈現的。與Canvas一樣,同一個單元格中 的子元素不會與其他元素互動佈局,資訊——它們僅僅是重疊而已。
Grid面板將元素分割到不可見的行列網格中。儘管可以在一個單元格中放置多個元素(這時這些元素會相互重疊),但在每個單元格中只放置一個元素通常更合理。當然,在Grid單元格中的元素本身也可能是另一個容器,該容器組織它所包含的一組控制元件。
注意:儘管Grid面板被設計成不可見的,但可將Grid.ShowGridLines屬性設定為True,從而更清晰的觀察Grid面板,方便偵錯,可以更準確地控制Grid面板如何選擇列寬和行高。
使用XAML程式碼實現:
<Window x:Class="WpfDemo.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Grid面板" Height="237" Width="525" WindowStartupLocation="CenterScreen"> <!--定義網格,此處顯示了格線--> <Grid ShowGridLines="True"> <Grid.RowDefinitions> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition></ColumnDefinition> <ColumnDefinition></ColumnDefinition> <ColumnDefinition></ColumnDefinition> </Grid.ColumnDefinitions> <Button Grid.Row="0" Grid.Column="0">Top Left</Button> <Button Grid.Row="0" Grid.Column="1">Middle Left</Button> <Button Grid.Row="1" Grid.Column="2">Button Right</Button> <Button Grid.Row="1" Grid.Column="1">Button Middle</Button> </Grid> </Window>
注意:如果不知道Grid.Row屬性,Grid面板會假定該屬性的值為0。對於Grid.Column屬性也是如此。因此,在Grid面板的第一個單元格中放置元素時可不指定這兩個屬性值。
如果Grid面板只是按比例分配尺寸的行和列的集合,它也就沒有什麼用處了。為了充分發揮Grid面板的潛能,可更改每一行和每一列的尺寸設定方式。
Grid面板支援以下三種設定尺寸的方式:
名稱 | 說明 |
絕對設定尺寸方式 | 使用裝置無關單位準確地設定尺寸,就是給一個實際的數位,但通常將此值指定為整數。這是最無用 的策略,因為這種策略不夠靈活,難以適應內容大小和容器大小的改變,而且難以處理在地化。 |
自動設定尺寸方式 | 值為Auto,實際作用就是取實際控制元件所需的最小值,每行和每列的尺寸剛好滿足需要,這是最有用 的尺寸設定方式。 |
按比例設定尺寸方式 | 按比例將空間分割到一組行和列中。這是對所有行和列的標準設定。通常值為*或N*,實際作用就是取儘可能大的值,當某一列或行被定義為*則是儘可能大,當出現多列或行被定義為*則是代表幾者之間按比例方設定尺寸。 |
為了獲得最大的靈活性,可混合使用這三種尺寸設定方式。例如,建立幾個自動設定尺寸的行,然後通過按比例設定尺寸的方式讓最後的一行或兩行充滿剩餘的空間,這通常是很有用的。
可通過設定ColumnDefinition物件的Width屬性或者RowDefinition物件的Height屬性來確定尺寸設定方式。
(1)設定100裝置無關單位的絕對寬度:
<ColumnDefinition Width="100"></ColumnDefinition>
(2)使用自動尺寸設定方式,需要使用Auto值
<ColumnDefinition Width="Auto"></ColumnDefinition>
(3)使用按比例尺寸設定方式,需要使用星號(*)
<ColumnDefinition Width="*"></ColumnDefinition>
如果希望不均勻的分割剩餘空間,可指定權重,權重必須放在星號之前。例如,如果有兩行是按比例設定尺寸,並希望第一行的高度是第二行高度的一半,那麼可以使用如下設定來分配剩餘空間:
<RowDefinition Height="*"></RowDefinition> <RowDefinition Height="2*"></RowDefinition>
使用XAML程式碼定義一個3行4列的Grid
<Window x:Class="WpfDemo.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Grid面板" Height="237" Width="525" WindowStartupLocation="CenterScreen"> <!--定義網格,此處顯示了格線--> <Grid ShowGridLines="True"> <!--定義行,3行--> <Grid.RowDefinitions> <!--自動行高--> <RowDefinition Height="Auto"></RowDefinition> <!--按比例行高--> <RowDefinition Height="*"></RowDefinition> <!--固定行高--> <RowDefinition Height="50"></RowDefinition> </Grid.RowDefinitions> <!--定義列,2列--> <Grid.ColumnDefinitions> <!--按比例列寬--> <ColumnDefinition Width="*"></ColumnDefinition> <!--固定列寬--> <ColumnDefinition Width="200"></ColumnDefinition> </Grid.ColumnDefinitions> <!--定義元素,並指定單元格--> <TextBlock Grid.Row="0" Grid.Column="0" >第一行第一列</TextBlock> <TextBlock Grid.Row="1" Grid.Column="0" >第二行第一列</TextBlock> <TextBlock Grid.Row="2" Grid.Column="0" >第三行第一列</TextBlock> <Button Grid.Row="0" Grid.Column="1">第一行第二列</Button> <Button Grid.Row="1" Grid.Column="1">第二行第二列</Button> <Button Grid.Row="2" Grid.Column="1">第三行第二列</Button> </Grid> </Window>
執行效果圖:
除了可以使用Row和Column附加屬性在單元格中放置元素,還可以使用另外兩個附加屬性使元素跨越多個單元格,這兩個附加屬性是RowSpan和ColumnSpan。
例如,下面的按鈕將佔據第一行中的第一個和第二個單元格的所有空間:
<Button Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2">Span Button</Button>
下面的程式碼通過跨越兩行和兩列,拉伸按鈕使其佔據所有4個單元格:
<Button Grid.Row="0" Grid.Column="0" Grid.RowSpan="2" Grid.ColumnSpan="2">Span Button</Button>
範例
1 <Window x:Class="WpfDemo.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 Title="Grid面板" Height="237" Width="525" WindowStartupLocation="CenterScreen"> 5 <!--定義網格,此處顯示了格線--> 6 <Grid ShowGridLines="True"> 7 <Grid.RowDefinitions> 8 <RowDefinition Height="*"></RowDefinition> 9 <RowDefinition Height="Auto"></RowDefinition> 10 </Grid.RowDefinitions> 11 <Grid.ColumnDefinitions> 12 <ColumnDefinition Width="*"></ColumnDefinition> 13 <ColumnDefinition Width="Auto"></ColumnDefinition> 14 <ColumnDefinition Width="Auto"></ColumnDefinition> 15 </Grid.ColumnDefinitions> 16 <TextBox Margin="10" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3">thie is a test</TextBox> 17 <Button Margin="10,10,2,10" Padding="3" Grid.Row="1" Grid.Column="1">OK</Button> 18 <Button Margin="10,10,2,10" Padding="3" Grid.Row="1" Grid.Column="2">Cancle</Button> 19 </Grid> 20 </Window>
介面執行效果:
每個Windows使用者都見過分隔條—能將視窗的一部分與另一部分分類的可拖動分割器。例如,當使用Windows資源管理器時,會看到一系列資料夾(在左邊)和一系列檔案(在右邊)。可拖動它們之間的分隔條來確定每部分佔據視窗的比例。
在WPF中,分隔條由GridSplitter類表示,它是Grid面板的功能之一。通過為Grid面板新增GridSplitter物件,使用者就可以改變行和列的尺寸。例如:
<Window x:Class="WpfDemo.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Grid面板" Height="237" Width="525" WindowStartupLocation="CenterScreen"> <!--定義網格,此處顯示了格線--> <Grid ShowGridLines="True"> <Grid.RowDefinitions> <RowDefinition ></RowDefinition> <RowDefinition ></RowDefinition> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="100"></ColumnDefinition> <ColumnDefinition Width="Auto"></ColumnDefinition> <ColumnDefinition Width="50"></ColumnDefinition> </Grid.ColumnDefinitions> <Button Grid.Row="0" Grid.Column="0" Margin="3">Left</Button> <Button Grid.Row="0" Grid.Column="2" Margin="3">Right</Button> <Button Grid.Row="1" Grid.Column="0" Margin="3">Left</Button> <Button Grid.Row="1" Grid.Column="2" Margin="3">Right</Button> <GridSplitter Grid.Row="0" Grid.Column="1" Grid.RowSpan="2" Width="3" VerticalAlignment="Stretch" HorizontalAlignment="Center" ShowsPreview="False"></GridSplitter> </Grid> </Window>
介面執行效果:
可以通過拖動中間的分割條,來改變兩列的相對寬度,效果如下圖所示:
注意:為了成功地建立GridSplitter物件,務必為VerticalAlignment(垂直對齊方式)、HorizontalAlignment(水平對齊方式)以及width屬性(或Height屬性)提供相應的屬性值。
理解如何使用GridSplitter類,從而得到所期望的效果需要一定的經驗,下面列出幾條指導原則:
在上面的例子中還包含了一處額外的細節。在宣告GridSplitter物件時,將ShowPreview屬性設定為false,因此,當把分隔條從一邊拖到另一邊時,會立即改變列的尺寸。但是如果將ShowPreview屬性設定為true,當拖到分隔條時就會看到一個灰色的陰影跟隨滑鼠指標,用於顯示將在何處進行分割。並且直到釋放了滑鼠鍵之後列的尺寸才改變。如果GridSplitter物件獲得了焦點,也可以使用箭頭鍵改變相應的尺寸。
提示:可以改變GridSplitter物件的填充方式,使其不只是具有陰影的灰色矩形。技巧是使用Background屬性應用填充,該屬性可以接收簡單的顏色或更復雜的畫刷。
到此這篇關於WPF使用Grid網格面板佈局的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45