這節繼續講一些xaml中的常用控件。
布局控件
除了我們之前講過的Grid,StackPanel,Border布局控件,xaml中還有如下幾個布局控件:
Canvas:使用這個布局,可以通過坐標來控制子控件的顯示。當把控件放到Canvas中,這個控件會被附加上Canvas.X和Canvas.Y屬性,我們可以根據這兩個屬性,來指定控件的坐標,單位是像素。wpf和WinForm中XY軸的定義是一樣的,都是從程序的左上角作為原點,原點到右上角這一條線是X軸,原點到左下角這一條線是Y軸。
DockPanel:使用這個布局,控件會自動靠在DockPanel的某一條邊,通過其附加在控件上的DockPanel.Dock這個屬性來指定停靠在那一條邊,這個屬性是個枚舉值:Top,Left,Right,Bottom。DockPanel它自身有一個非常重要的bool值屬性:LastChildFill,當這個屬性為True時,最后一個添加在該布局控件中的控件會自動填滿剩余空間,即使為其賦了DockPanel.Dock值,也會被無視,該屬性默認就是True,如果開發時有特殊需求自行更改為False即可。
WarpPanel:這個布局跟StackPanel很相像,它是流式布局,同樣是使用Orientation屬性來控制子控件的排列,但是比StackPanel更強大的功能是當控件不能在一行或者一列排開時,它會自另起一行或一列,
列表項控件
Menu:這個控件專用於菜單項的顯示,使用其屬性ItemsSource綁定后台一個集合或數組,或者使用MenuItem以硬編碼的形式來填充一個個菜單項,MenuItem的Header屬性用來控制菜單項的顯示文字,該控件除了有click這樣的一般事件外,還有用於響應選中的Checked和Unchecked事件,以及控制選中事件是否執行的IsCheckable的屬性(該屬性默認為False),請看下面一段代碼:
<Menu > <MenuItem Header="菜單項1" IsCheckable="True" Checked="MenuItem_Checked" Unchecked="MenuItem_Unchecked"/> <MenuItem Header="菜單項2" /> <MenuItem Header="菜單項3" /> <MenuItem Header="菜單項4" /> <MenuItem Header="菜單項5" /> </Menu>
對應后台C#事件處理器代碼為:
private void MenuItem_Checked(object sender, RoutedEventArgs e) { MessageBox.Show("菜單1被選中了"); } private void MenuItem_Unchecked(object sender, RoutedEventArgs e) { MessageBox.Show("菜單1取消選中"); }
程序運行時,當我點擊菜單項1時會彈出MessageBox框提示“菜單1被選中了”,取消選中時會提示“菜單1取消選中”,效果如下:
ListBox:這個控件是個使用頻率很高的控件,用於顯示后台一個數組或者集合數據,同樣的也是使用其屬性ItemsSource與后台進行數據綁定,或者使用ListboxItem以硬編碼的形式填充數據,請看代碼:
<ListBox> <ListBoxItem>列表項1</ListBoxItem> <ListBoxItem>列表項2</ListBoxItem> <ListBoxItem>列表項3</ListBoxItem> <ListBoxItem>列表項4</ListBoxItem> <ListBoxItem>列表項5</ListBoxItem> </ListBox>
而且,ListBoxItem可以容納控件,比如Button,CheckBox,都可以往里填充:
<ListBox> <ListBoxItem> <Button Content="我是按鈕"/> </ListBoxItem> <ListBoxItem> <CheckBox IsChecked="True"/> </ListBoxItem> </ListBox>
在這種情況下,ListBoxItem標簽就可以省略了,系統會自動進行封裝:
<ListBox> <Button Content="我是按鈕"/> <CheckBox IsChecked="True"/> </ListBox>
DataGrid控件
這個控件就是一個表格,跟數據庫中的表是類似的,並且它的職責就是用來顯示數據庫中的數據,下面先看個實例代碼:
<DataGrid ItemsSource="后台數據源"> <DataGrid.Columns> <DataGridTextColumn Header="我是文本"/> <DataGridCheckBoxColumn Header="我是選擇框"/> <DataGridComboBoxColumn Header="我是下拉框"/> <DataGridHyperlinkColumn Header="我是超鏈接"/> <DataGridTemplateColumn Header="我是自定義列" Width="1*"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Content=""/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid>
該控件同樣是使用ItemsSource來綁定數據,我們使用該控件時要先通過DataGrid.Columns來定義列的數量及類型,微軟已經為我們定義了上述代碼中所示的文本,選擇框,下拉框,超鏈接四個常用列類型,根據業務需求,我們也可以通過DataGridTemplateColumn來自定義列模板。
對於該控件的使用,后期會詳細通過代碼體現,如果有任何控件使用上的問題,您盡可以來垂詢。