一.章节目标

这几章节我们会创建一个完整的Window程序,包括使用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

在window程序中只能包含一个子元素。作为其内容。如果要在其中包含多个元素,就可以将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类。

Zara带你快速入门WPF(2)---布局篇的更多相关文章

  1. Zara带你快速入门WPF(3)---触发器篇

    一.前言 使用触发器,可以动态的改变控件的外观,因为一些事件或属性改变了,把鼠标移动到按钮上,按钮就会改变其外观.通常这些必须写在C#代码中,使用WPF也可以使用XAMl实现,而这只会影响UI. 属性 ...

  2. Zara带你快速入门WPF(4)---Command与功能区控件

    前言:许多数据驱动的应用程序都包含菜单和工具栏或功能区控件,允许用户控制操作,在WPF中,也可以使用功能区控件,所以这里介绍菜单和功能区控件. 一.菜单控件 在WPF中,菜单很容易使用Menu和Men ...

  3. Zara带你快速入门WPF(1)---开篇

    一.引言 我们时常可以看到园友们在讨论WPF与WinForm!它们两个的激情对决,看到大家热情洋溢的评论,搞技术的我也是深受感动. 二.走势 但抱歉的是,我无法预测未来WPF会怎么样.乔布斯说过这么一 ...

  4. 【转】C#单元测试,带你快速入门

    [转]C#单元测试,带你快速入门 注:本文示例环境 VS2017 XUnit 2.2.0 单元测试框架 xunit.runner.visualstudio 2.2.0 测试运行工具 Moq 4.7.1 ...

  5. Java快速入门-03-小知识汇总篇(全)

    Java快速入门-03-小知识汇总篇(全) 前两篇介绍了JAVA入门的一系小知识,本篇介绍一些比较偏的,说不定什么时候会用到,有用记得 Mark 一下 快键键 常用快捷键(熟记) 快捷键 快捷键作用 ...

  6. 【WPF】 布局篇

    [WPF] 布局篇 一. 几个常用且至关重要的属性 1. Width,Height : 设置窗体,控件宽高. 这里注意,WPF是自适应的, 所以把这2个属性设置 Auto, 则控件宽高会自动改变. 2 ...

  7. 5分钟带你快速入门和了解 OAM Kubernetes

    什么是 OAM? OAM 的全称为开放应用模型(Open Application Model),由阿里巴巴宣布联合微软共同推出. OAM 解决了什么问题? OAM 本质是为了解耦K8S中现存的形形色色 ...

  8. WPF新手快速入门系列 1.布局

    [概要] 该系列文章主要描述,新手如何快速上手做wpf开发.看过网上部分的教程,主要讲述的是介绍控件.这并没有问题,但是没有把自己的使用经验也完整的描述出来. 所以特此编写此系列文章希望能帮助到,因为 ...

  9. C#单元测试,带你快速入门

    注:本文示例环境 VS2017 XUnit 2.2.0 单元测试框架 xunit.runner.visualstudio 2.2.0 测试运行工具 Moq 4.7.10 模拟框架 为什么要编写单元测试 ...

随机推荐

  1. Linux从入门到进阶全集——【第十四集:Shell编程】

    正则表达式(与通配符) 正则表达式:匹配字符串,属于包含匹配[只要包含匹配条件就行],grep,awk,sed等命令支持正则表达式 通配符(*,?,[]):匹配文件名,属于完全匹配[必须是完全匹配条件 ...

  2. JWT 超详细分析

    请参考以下链接 https://learnku.com/articles/17883

  3. Mac下使用数据库将Excel数据转换存入.plist

    记录于2013/10/26   基本步骤: 1.将Excel表格另存为.csv格式 2.用类似TextWrangler工具将.csv文件转成UTF-8格式 3.使用火狐插件SQLite Manager ...

  4. [Tips]vim设置

    临时设置 在vim中输入 :set nu! 若显示行号时,它的功能时取消行号:若不显示行号时,它的功能是显示行号. 固定设置 在~/.vimrc中进行设置. 添加注释: 双引号是注释 ” this i ...

  5. IntelliJ IDEA之UML类图

    IntelliJ IDEA之UML类图 生成方法 Show Diagrams 选中需要的类,右键单击Diagrams,之后点击Show Diagrams,或者快捷键Ctrl+Alt+Shift+U 生 ...

  6. Vue.set() this.$set()引发的视图更新思考

    引文 vue文档列表渲染中有条注意事项: 这里提到的两种情况实际改变了数据但是没有触发视图更新. 由此引出Vue.set(),先上文档API: this.$set()和Vue.set()本质方法一样, ...

  7. Mac_Sublime Text3(mac)一些插件和快捷键

    下载地址http://www.sublimetext.com/3 一.安装Package Control 按Ctrl + ` 调出console,粘贴下列安装代码到底部命令行并回车: import u ...

  8. Mac_mac下使用ll等指令

    Linux有ll等命令,切换到MAC下这些指令是没有的 其实就是别名,用ls -alF也能做到 添加方法: vim ~/.bash_profile 输入一下内容 alias ll='ls -alF'a ...

  9. ARouter基础使用(一)

    一个用于帮助 Android App 进行组件化改造的框架 —— 支持模块间的路由.通信.解耦1.新建一个Android项目 "ARouterDemo"2.添加依赖和配置 andr ...

  10. 删除 id 列表 存进数据库

    当图片写的传id的时候 用着方法存进数据库