当前位置 博文首页 > Charles_Su:XAML常用控件2

    Charles_Su:XAML常用控件2

    作者:Charles_Su 时间:2021-05-24 18:26

    这节继续讲一些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来自定义列模板。

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

     

    bk