一. 章节目标
这几章节我们会创建一个完整的 Windows 程序, 包括使用 DataGrid 空间, 数据绑定是把. NET 类中的数据提供给用户界面的一个重要概念, 还允许修改数据, 包括. NET4.5 新增的 INotifyDataErrorInfo 接口. Commanding 可以把 UI 的事件映射到代码上.
TreeView 和 DataGrid 控件是显示数据绑定的 UI 控件. TreeView 控件可以在树形结构中显示数据, 其中数据根据用户的选择进行动态加载. 通过 DataGrid 控件学习如何使用过滤, 排序, 分组, 以及. NET4.5 中添加的功能 ---- 实时成型, 它可以实时改变排序或过滤选项. 这篇只是简单的说下 WPF 控件.
二. 简单控件
TextBox | 用于显示简单无格式文本 |
RichTextBox | 通过 FlowDocument 类支持带格式的文本, 它与 TextBox 都派生于 TextBoxBase |
Calendar | 显示你年份月份 |
DataPicker | 控件会打开 Calendar 屏幕, 提供选择日期 |
PasswordBox | 输入密码,可以通过 PasswordChar 修改显示的格式, 通过 PasswordChanged 可以触发输入事件 |
ScrollBar | 包含一个 Thumb,用户可以从 Thumb 中选择一个值, 如果内容超过这个了, 我就可以显示滚动条 |
ProgressBar | 可以指示时间较长的操作的进度 |
Slider | 用户可以移动 Thumb, 选择一个范围的值, 它和 ScrollBar,ProgressBar 都来源一个基类 RanGeBase |
简单控件是没有 Content 属性的控件, 例如 Button 类可以包含任意形状和任意元素.
三. 内容控件
ContentControl 有一个 content 属性, 利用 Content 属性, 可以给空间添加任意内容, 因为 Button 类派生自基类 ContentControl. 所以在这个地方可以添加任何内容
例如: Button,RepeatButton,toggleButton,CheckBox,RadioButton,Label,
Frame 该控件支持导航, 使用 Navigate() 方法可以导航到一个页面的内容上, 如果内容是 html, 就是用 webBrowser 控件来显示.
ListBoxItem 是 ListBox 的一项 , ToolTip 创建一个弹窗 , 其中 UserControl 也是内容控件
四. 带标题的内容控件
带标题的内容控件派生自 HeaderContentControl 基类. HeaderContentControl 类又派生于 ContentControl,HeaderContentControl 类的 Header 属性定义了标题的内容, HeaderTemplate 属性可对标题金泉完全的定制. HeaderContentControl 的控件如表
Expander | 可以创建一个带对话框的 “高级” 模式,它在默认情况下不显示所有的信息,只有用户展开它。才会显示更多的信息,在未展开下,只显示标题信息,在展开的情况下, 显示内容 |
GroupBox | 提供了边框和标题来组合控件 |
TabItem | TabItem 的 Header 属性定义了标题内容, 这些内容都是用 TabControl 的标签显示 |
Expander 空间的简单用法如下列代码, 把 Expander 控件的 Header 属性设置未 Click formove 这个文本用于显示扩展, 这个控件的内容只有在控件展开的时候才显示.
另外有两个属性可以修饰 Content,HorizontalAlignment 与 VerticalAlignment 属性就 Center,Left,Right
五. 项内容
ItemsControl 类包含一个可以用 Items 属性访问的数据项列表. 派生自 ItemsControl 的类.
Menu、ContextMenu | Menu 类和 ContextMenu 类派生自抽象基类 MenuBase。把 MenuItem 元素放在数据项列表和相关联的命令中 |
StatusBar | StatusBar 控件通常在应用程序的底部、为用户提供状态信息、可以把 StatusBarItem 元素放在 StatusBar 列表中 |
TreeView | 要分层显示数据项 |
ListBox、ComboBox、TabControl | 都有相同的抽象基类 Selector、这个基类可以选择数据项 |
DataGrid | 显示数据、可定制网格 |
下面例子说明了 Border ViewBox 和 BulletDecorator 类
ViewBox 将子元素拉伸并缩放到可用的空间中. StretchDirection 和 Streth 属性专用于 ViewBox 的功能, 它们允许设置子元素是否双向拉伸, 以及是否保持宽高比
BulletDecorator 类用一个项目符号修饰其子元素. 子元素可以是任何元素, 项目符号也可以是任何元素.
- <StackPanel>
- <Border BorderBrush="Violet" BorderThickness="5">
- <Label > 呵呵哒 </Label>
- </Border>
- <Viewbox StretchDirection="Both" Stretch="Uniform">
- <Label Width="79"> 么么哒 </Label>
- </Viewbox>
- <BulletDecorator Height="99.874">
- <BulletDecorator.Bullet>
- <Image Width="196.968" HorizontalAlignment="Center" Margin="5,5,-166.968,-51.636"
- Source="http://p4.123.sogoucdn.com/imgu/2018/10/20181019163410_194.jpg"/>
- </BulletDecorator.Bullet>
- <BulletDecorator.Child>
- <TextBlock > 案说法 </TextBlock>
- </BulletDecorator.Child>
- </BulletDecorator>
- </StackPanel>
六. 布局
1.StackPanel
在 Windows 程序中只能包含一个子元素. 作为其内容. 如果要在其中包含多个元素, 就可以将 StackPanel 当作成一个子元素, 并将在它当中添加子元素. 它是一个简单的控件, 可以通过 StackPanel 控制显示方向. ToolBarPanel 类派生于 StackPanel
2.WrapPanel
WrapPanel 将子元素字左右逐个排列, 若一个书评行中放不下, 就排在下一行, 面板的方向可以是水平或是垂直.
- <WrapPanel>
- <WrapPanel.Resources>
- <Style TargetType="Button">
- <Setter Property="Margin" Value="5"></Setter>
- </Style>
- </WrapPanel.Resources>
- <Button>button</Button>
- <Button>button</Button>
- <Button>button</Button>
- </WrapPanel>
3.Canvas
Canvas 是一个允许显式指定控件位置的面板, 它定义了 Left,right,top,bottom 属性. 这个我们后续详解.
4.DockPanel
它非常类似于 winform 中的停靠功能, DockPanel 可以指定排列子空间的区域. Panel 定义了 Dock 附加属性, 代码如下:
- <DockPanel>
- <Border Background="AliceBlue" Height="25" DockPanel.Dock="Top">
- <TextBlock>menu</TextBlock>
- </Border>
- <Border Background="DarkMagenta" DockPanel.Dock="Top">
- <TextBlock>ribbon</TextBlock>
- </Border>
- <Border Background="LightPink" DockPanel.Dock="Bottom">
- <TextBlock>status</TextBlock>
- </Border>
- <Border Background="LightPink" DockPanel.Dock="left">
- <TextBlock>left side</TextBlock>
- </Border>
- <Border Background="HotPink">
- <TextBlock>remaining part</TextBlock>
- </Border>
- </DockPanel>
七. Grid
使用 grid 可以在行和列中排序控件, 对于每一列可以指定一个 ColumnDefintion, 对于每一行可以指定一个 RowDefintion, 在每一列和每一行中都可以指定高度和宽度, 其中前面说到的两个属性中分别有一个 Width 以及 Height 依赖属性, 其中单位有像素, 厘米
英寸或点为单位定义高度和宽度, 或者把它们设置为 Auto, 根据内容来确定其大小, 在为列提供可用控件时, 可以将 width 属性设置为 *, 要使扩大到两倍, 就设置为 2. 写个示例大家就了解了. 这个 grid 包含几个 label 和 textbox 控件, 因为这些控件的父控件是 grid, 所以可以设置附加 column,columnspan,row,rowspan.
- <Grid ShowGridLines="True">
- <Grid.ColumnDefinitions>
- <ColumnDefinition/>
- <ColumnDefinition/>
- </Grid.ColumnDefinitions>
- <Grid.RowDefinitions>
- <RowDefinition/>
- <RowDefinition/>
- <RowDefinition/>
- </Grid.RowDefinitions>
- <Label Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="0"
- VerticalAlignment="Center" HorizontalAlignment="Center" Content="Title"/>
- <Label Grid.Column="0" Grid.Row="1" VerticalAlignment="Center" Content="firstname:" Margin="10"/>
- <TextBox Grid.Column="1" Grid.Row="1" Width="100" Height="30"></TextBox>
- <Label Grid.Column="0" Grid.Row="2" VerticalAlignment="Center" Content="lastname:" Margin="10"/>
- <TextBox Grid.Column="1" Grid.Row="2" Width="100" Height="30"></TextBox>
- </Grid>
为了发方便看到行和列, 把 showgridlines 属性设置为 True; 注意: 要使 Grid 的每个单元格有相同的尺寸, 可以使用 UniformGrid 类.
来源: https://www.cnblogs.com/ZaraNet/p/9833300.html