一.章节目标

这几章节我们会创建一个完整的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. HTC VIVE固定头显位置

    用此方法可以限制HTC VIVE头显定位(即固定头显位置,但是视角是不固定的). UnityEngine.XR.InputTracking.disablePositionalTracking = fa ...

  2. C++ 初读迭代器

    迭代器 这是个啥? string对象或vector对象可以通过下标访问每一个元素,迭代器也具有同样的效果.那又有什么不同呢?事实上并不是所有的容器到可以使用下标访问每一个元素,即在容器上迭代器更具普适 ...

  3. git 的常用命令(未完待补充)

    一.初始化 git git init 这样会默认创建 master 分支 二.查看当前状态 git status  查看 git 的默认状态 三.创建一个文件,并把它添加到 git 仓库,使用 git ...

  4. Git 通过ssh 配置基于Host的差异配置

    Host gitlab.xxx.com HostName gitlab.xxx.com User user IdentityFile xxx\.ssh\id_rsa Host github.com H ...

  5. url.cn短网址批量缩短开发接口

    https://www.showapi.com/api/view/1728 //md5签名方式--非简单签名 <?php header("Content-Type:text/html; ...

  6. Y1吐槽001 怎么做产品

    做一个产品,这个产品是做给用户用的还是做给领导看的完全是两个不同的出发点..做给领导看有好处,毕竟领导有知道进展的权利和指导方向的作用,还有一个好处就是表现得好. 忽略了使用者的感受是非常致命的,标模 ...

  7. 在centos 7云服务器上搭建Apache服务器并访问到你的网站

    网站是指在互联网上根据一定的规则,用HTML等语言制作的网页的集合.网站的目的是用来展示一些信息,如果是个人网站则是为了展示自己的一些想被人知道的东西,例如自己的一些作品,又或者是通过网站来达到盈利的 ...

  8. 微信JS SDK接入的几点注意事项

    微信JS SDK接入,主要可以先参考官网说明文档,总结起来有几个步骤: 1.绑定域名:先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”.备注:登录后可在“开发者中心”查看对 ...

  9. nginx连接数优化

    一.一般来说nginx 配置文件中对优化比较有作用的为以下几项: 1. worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu计 ...

  10. java学习之路--零碎的知识笔记

    java运算符: 自增自减运算符: int b = ++a; 拆分运算过程为: a=a+1=4; b=a=4, 最后结果为b=4,a=4 前缀自增自减法(++a,--a): 先进行自增或者自减运算,再 ...