XAML常用控件2
这节继续讲一些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来自定义列模板。
对于该控件的使用,后期会详细通过代码体现,如果有任何控件使用上的问题,您尽可以来垂询。
最新文章
- redis 集群创建常见几个问题
- 解析JSON插入数据库
- css学习笔记 1
- [LeetCode] Longest Increasing Subsequence
- ssh和mvc理论基础
- JavaScript基础总结三部曲之一
- 批处理+VBS+注册表实现开机自动启动EXE程序
- docker设置代理
- 【原创】一起学C++ 之 字符串 ---------C++ primer plus(第6版)
- 如何有效申请TI的免费样片
- 填坑 - 使用Entity Framework 6 + Sqlite进行DB first开发
- 设计模式之Adapter模式
- CF#483(div2 C)
- Mac os x下几款mysql客户端
- Java03动手动脑
- 关于SLG的产品市场判断
- google的protobuf简单介绍
- FORWARD转发链的功能
- elasticsearch安装步骤
- python-计算数据的相关性
热门文章
- 【java框架】SpringBoot(5)--SpringBoot整合分布式Dubbo+Zookeeper
- 计划任务统一集中管理系统cronsun(替代crontab)
- 【剑指offer】8:跳台阶
- 「最强」Lettuce 已支持 Redis6 客户端缓存
- VirtualBox虚拟机读取U盘
- linux 查看cpu型号、memory
- kafka-简介-01
- 10. Vue-Vue 的{{}}、v-html、v-text
- 多线程之Lock接口
- 0802_转载-nn模块中的网络层介绍