XAML常用控件2

2021-11-05 14:53:09 浏览数 (1)

这节继续讲一些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),请看下面一段代码:

代码语言:javascript复制
<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#事件处理器代码为:

代码语言:javascript复制
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以硬编码的形式填充数据,请看代码:

代码语言:javascript复制
<ListBox>
    <ListBoxItem>列表项1</ListBoxItem>
    <ListBoxItem>列表项2</ListBoxItem>
    <ListBoxItem>列表项3</ListBoxItem>
    <ListBoxItem>列表项4</ListBoxItem>
    <ListBoxItem>列表项5</ListBoxItem>
</ListBox>

而且,ListBoxItem可以容纳控件,比如Button,CheckBox,都可以往里填充:

代码语言:javascript复制
<ListBox> 
    <ListBoxItem>
        <Button Content="我是按钮"/>
    </ListBoxItem> 
    <ListBoxItem>
        <CheckBox IsChecked="True"/>
    </ListBoxItem> 
</ListBox>

在这种情况下,ListBoxItem标签就可以省略了,系统会自动进行封装:

代码语言:javascript复制
<ListBox> 
    <Button Content="我是按钮"/>
    <CheckBox IsChecked="True"/>
</ListBox>

DataGrid控件

这个控件就是一个表格,跟数据库中的表是类似的,并且它的职责就是用来显示数据库中的数据,下面先看个实例代码:

代码语言:javascript复制
<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来自定义列模板。

对于该控件的使用,后期会详细通过代码体现,如果有任何控件使用上的问题,您尽可以来垂询。


今天是个悲痛的日子,共和国痛失两位国士,他们的一生功绩,是共和国骄傲的脊梁,永远擎着国家安稳的天穹不落。

英雄已不在,后起应赴之,我们作为后起之秀,应以他们为榜样,努力做出自己的贡献。

天堂没有饥饿与病痛,一路走好。

0 人点赞