一.章节目标

这几章节我们会创建一个完整的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入门级

    Linux及其发行版 我安装过的Linux发行版centOS.Kali.Ubuntu.rebHat. Reference Linux发行版排行榜 开源协议 Reference 开源协议 场景 说明一个 ...

  2. Exp5 MSF基础应用 20164302 王一帆

    1.实验内容 1.1实验要求 一个主动攻击实践,ms08_067; 一个针对浏览器的攻击,MS10-018(成功且唯一),MS12-004(成功且唯一): 一个针对客户端的攻击,adobe_toolb ...

  3. CentOS7x64 防火墙配置

    Firewall开启常见端口命令: firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=publi ...

  4. MongoDB 用Robomong可视化工具操作的 一些简单语句

    一.数据更新 db.getCollection('表名').update({ "字段":{$in:["值"]} }, //更新条件 {$set:{ " ...

  5. 使用mongodb的一些笔记

    show dbs # 从结果中发现有cmb_demo_23_hackeruse cmb_demo_23_hacker db.all_in_one.find({"_id":15480 ...

  6. Kubernetes1.7—DNS安装

    虽然通过了Service解决了Pod重建后IP动态变化(服务发现).负载均衡问题,但使用Service还是要需要知道CLUSTER-IP,而通过NDS可以解决该问题:在Kubernetes集群中可通过 ...

  7. 3.SSM整合_多表_一对多的增删改查

    1.配置文件跟上一章一样,这里就不多写了,主要是Mapper映射文件,一对多反过来就是多对一 一 接口 public interface CategoryMapper { public void ad ...

  8. css实用属性

    background-size: 100% 100%;            背景通过拉伸实现填充 自适应 overflow: hidden;                              ...

  9. 2019中山大学程序设计竞赛-Monitor

    题目地址 题目大意:给你一个n*m的矩形,在这个矩形内告诉你p个矩形(左下角和右上角坐标),问你q个问题,每次也是给你一个矩形(左下角和右上角坐标),问你每个矩形是否可以被开始给的p个矩形完全覆盖. ...

  10. autpmapper映射忽略某个属性

    1.直接加特性[IgnoreMap] 2.映射规则 CreateMap<BaseAccount, BaseAccountListDto>().ForMember(dest => de ...