程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Windows 8風格應用開發入門 十七 布局控件

Windows 8風格應用開發入門 十七 布局控件

編輯:關於.NET

Panel類是開發Windows 8 Store應用中一個重要類,它在Windows 8 Store應用布局系統中扮演非常重要角色。

Panel可以承載多個子元素,面板類可以把子元素存放在棧中、或網格裡面、或把子元素停靠在其邊緣等。

Panel類自身是一個抽象類,下面是Panel類的層次結構:

Windows 8 Store應用中包含的三個標准布局控件:Canvas(通常在常規布局中,盡量不要考慮使用Canvas,不過在某些特殊情況下,使用Canvas還是非常方便的)、Grid(它是大多數常規布局的首選)、StackPanel(可能是最簡單的一種面板類型)。

Canvas

要在Canvas中定位元素,需要提供相對於左上角的水平坐標和豎直坐標。

代碼實現效果:

其中Left和Top屬性表示元素的左上角與Canvas左上角的相對位置。

一般來說Canvas比較適合把元素布局在任何位置上,因此這樣更適合於矢量圖形編程而不是控件布局編程。

同樣我們C#代碼中控制控件元素在Canvas中布局。

我們注意到xaml代碼中並沒有設置button的相對於Canvas的Left和Top屬性,這裡通過C#代碼進行設置。

SetValue方法定義在DependencyObject類裡面,LeftProperty和TopProperty是Canvas中DependencyProperty類型的靜態字段。

兩種布局設置方式最後實現效果是一樣。

Canvas還有一個附加屬性是ZIndex,我們可以使用ZIndex來更改默認元素的層次。

我們可以在一個或多個字元素中設置Canvas.ZIndex附加屬性,可以將這個屬性理解為屏幕中想出的Z軸,z值較大的元素會覆蓋z值較小的元素。如果兩個元素具有相同的Canvas.ZIndex值,那麼會根據他們在Children集合中德順序來分層。

注意:雖然Canvas.ZIndex附加屬性定義在Canvas類中,但是它實際上適用於任何類型的面板。另外如果我們自定義一個面板類,其實我們並不需要處理Z值,布局系統會自動處理。

Grid

Grid是我們選擇面板類時默認選擇,它非常靈活易用。

Grid讓我們可以想起HTML中的表格(Table),但兩者是有差異的:Grid不像HTML的表格,它並不是做格式化的工作,只用於布局,並且也沒有標題或者內置單元格分割線等概念。

Grid具有一定數量的行和列;行的高度可以不一樣,列的高度也可以不一樣。Grid中的子元素可以占據一個特定的行和列,也可以占據多行和多列。雖然Grid功能非常強大,但也是需要付出代價的,我們在使用Grid的時候需要知道需要多少行和列來容納所有的子元素。

注意:嵌套Grid是十分常見,但不要濫用,特別是在程序會經常重新生成布局的情況下。過於復雜的嵌套會導致布局非常混亂。

實現效果:

Grid定義了RowDefinitions和ColumnDefinitions兩個屬性,它們分別是RowDefinition和ColumnDefinition對象的集合。這些對象定義了每行的高度和每列的寬度,我們通常可以有三種選擇:

1) 使用單詞“Auto”;

2) 固定的像素;

3) 星號,或者數字後加星號;

通過Grid的附加屬性Grid.Row和Grid.Column來指明子元素所在的行和列。

StackPanel

StactPanel可以理解成已“棧”的形式將其子元素自頂向下或自左向右排列,並且子元素彼此之間不互相重疊。

默認情況下子元素是自頂向下排列的。

我們也可以設置子元素是自左向右排列。

我們可以通過StackPanel的Orientation屬性來改變子元素排列的方向。

當然我們也可以通過C#代碼來設置子元素的排列方向。

本文出自 “王祖康” 博客,請務必保留此出處http://wzk89.blog.51cto.com/1660752/1019840

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved