wpf学习笔记

chapter 3 布局

3.4.5 共享尺寸组

两个grid具有相同的大小。

3.4.6 uniformGrid面板

单元格大小相同。

3.5 Canvas面板

基于坐标的布局。

3.5.1 ZIndex

控制canvas面板中元素的层叠方式。

3.5.2 InkCanvas元素

接收手写笔输入。

3.6 布局示例

3.6.1 列设置

设置grid列的各种属性

3.6.2 动态内容

button自动的改变长度使窗口适应对应用程序的修改。

3.6.3 组合式用户界面

chapter 4 依赖项属性

4.1 理解依赖项属性

依赖项属性是标准.net属性的全新实现

4.1.1 定义依赖项属性

定义依赖项属性的字段的名称是在普通属性的末尾处加上单词’Property’。

4.1.2 注册依赖项属性

包括创建FrameworkPropertyMetadata对象,和调用DependencyProperty.Register()静态方法注册属性

4.1.3 添加属性包装器

使用传统的.NET属性封装WPF依赖属性项。

4.1.4 WPF使用依赖项属性的方式

属性变化响应,属性值绑定(第八章),编写自动改变的触发器(第11章)。

4.1.5 共享的依赖项属性

一些具有不同继承层次的类可能会共享同一依赖项属性。

4.1.6 附加的依赖项属性

4.2 属性验证

WPF用两种方法阻止非法值:
ValidateValueCallback,接收或拒绝新值,通常该函数用于捕获违反属性约束的明显错误。
CoerceValueCallback:通常用于处理为相同对象设置的依赖项属性值相互冲突的问题

4.2.1 验证回调

4.2.2 强制回调

处理相互关联的属性,WPF会保存设置的精确值,读取属性时会评估使用哪个属性。

chapter 5 路由事件

5.1 理解路由事件

5.1.1 定义注册封装路由事件

事件由只读的静态字段表示,然后EventManager.RegisterRoutedEvent()注册。

5.1.2 共享路由事件

共享路由事件的定义

5.1.3 引发路由事件

RaiseEvent()方法负责为每个已经通过AddHandler()方法注册的调用程序引发事件。

5.1.4 处理路由事件

在XAML标记添加事件特征。
img.MouseUp += new MouseButtonEventHandler(img_MouseUp);
img.MouseUp += img_MouseUp;
上面的代码依赖于事件封装器,事件封装器调用UIElement.AddHandler()方法支持所有WPF事件,也可自行调用这个方法
img.AddHandler(Image.MouseUpEvent, new MouseButtonEventHandler(img_MouseUp) );

5.2 事件路由

直接路由事件
冒泡路由事件:向上传递
隧道路由事件:向下传递,在事件到达恰当的控件之前为预览事件提供了机会。
EventManager.RegisterRoutedEvent()注册时,需要传递一个RoutingStrategy。

5.2.1 RoutedEventArgs

RoutedEventArgs的属性:
Source 指示引发了事件的对象
originalSource最初是什么对象引发了事件
RoutedEvent 通过事件处理程序为触发的事件提供RoutedEvent对象
Handled 允许终止冒泡或隧道

5.2.2 冒泡路由

提示,大多数WPF事件没有提欧共CLick事件,而是提供了MouseUp和MouseDown事件。

5.2.3 处理挂起的事件

AddHandler提供了重载,第三个参数为true时,即使设置了handled标志,也将接收到事件。

5.2.4 附加事件

通过处理更高层次元素的Click事件,处理所有按钮的Click事件。

5.2.4 隧道路由事件

以单词Preview开头

5.3 WPF事件

5.3.1 生命周期事件

所有元素的生命周期事件:initialized,Loaded,Unloaded。
XAML负责调用BeginInit,完成初始化后调用EndInit方法,引发Initialized事件。完成初始化过程后,引发loaded事件。
Window类的生命周期事件:
SourceInitlized,ContentRenderd,Activated,Deactivated,Closing,Closed。

5.3.2 输入事件

InputEventArgs类只增加了两个属性:TimeStamp,Device(返回一个对象)

5.4 键盘输入

PreviewKeyDown,KeyDown,PreviewTextInput,TextInput,PreviewKeyUp,KeyUp。

5.4.1 处理按键事件

TextBox

5.4.2 获取键盘状态

KeyBoardDevice属性提供的方法,包括isKeyDown等等

5.5 鼠标输入

MouseEnter 和MouseLeave是直接事件。
MouseCapture

5.5.1 鼠标单击

通常,单击时我们对UP事件进行响应。
PreviewMouseLeftButtonDown,PreviewMouseLeftButtonUp and etc…

5.5.2 捕获鼠标

Mouse.Capture()方法并传递适当的元素以捕获鼠标

5.5.3 鼠标拖拽

所有拖放操作都集中在System.Windows.DragDrop中,通过使用该类,任何元素都可以参与拖放操作。

5.6 多点触控输入

忽略

第六章 控件

6.1 控件类

6.1.1 背景画刷与前景画刷

  1. 用代码设置颜色
  2. 在XAML里设置颜色
    画刷支持自动更改通知,指的是画刷改变后控件相应的会更新自身。

6.1.2 字体

忽略

6.2 内容控件

内容控件只能包含一个子元素。

6.2.1 Content属性

Content属性只接受单一对象。
支持的对象分为两大类:
未继承自UIElement类的对象:内容控件调用这些控件的ToString方法。
继承自UIElement类的对象:这些对象使用UIElement.OnRender()方法在内容控件的内部进行显示。

6.2.2 对齐内容

HorizontalContentAlignment和VerticalContentAlignment绝对内容控件中的内容如何对齐,padding内边距。

6.2.3 WPF内容原则

6.2.4 标签

Target属性,使用指向另一个控件的绑定表达式。

6.2.5 按钮

Button,CheckBox,RadioButton。ClickMode属性决定何时引发Click事件以响应鼠标动作。
1. Button控件
IsCancel取消按钮,isDefault默认按钮。一个窗口只能有一个取消按钮和一个默认按钮。
isDefaulted另一个控件具有焦点该控件不接受Enter输入。例如只有当TextBox的AcceptsReturn属性被设置为true的TextBox具有焦点时,默认按钮的isDefaulted属性为false。
2. ToggleButton和RepeatButton
RepeatButton 只要按钮保持按下状态,不断触发Click事件。
ToggleButton 该类具有按下状态和未按下状态两个按钮。
RepeatButton构件高级的ScrollBar控件等,ToggleButton派生出CheckButton和RadioButton两个更有用的类。
3. CheckBox控件
ToggleButton定义了复选框进入特定状态时会触发的三个事件:Checked,UnChecked,Indeterminate。
4. RadioButton控件
Groupname属性,可使用这个属性在同一个容器中创建多个组,或者将包含在多个容器中的单选按钮创建为一组。

6.2.6 工具提示

ToolTip类或者ToolTip对象设置工具提示,不可用于交互。
1. 设置ToolTip对象的属性。
2. 设置ToolTipService属性
ToolTipService不能继承,设置延迟时间,显示时间等等。
3. PopUp控件
它不会自动显示,StayOpen设置为true,可接受焦点。

6.3 特殊容器

可使用和/或内容的布局容器,讲内容封装在HeaderedContentControl中。

6.3.1 ScrollViewer

封装布局容器,ScrollBarVisibility属性有Visual,auto,Disable,Hidden等值。
水平是HorizontalScrollBarVisibility。
1. 通过代码进行滚动
LineUp, PageUp等方法。
2. 自定义滚动
实现IScrollInfo接口,实现自定义滚动。

6.3.2 GroupBox

有圆角和标题的方框

6.3.3 TabItem

TabItem是TabControl中的一页

6.3.4 Expander

拓展器

6.4 文本控件

6.4.1 多行文本

minLines, maxLines,AcceptReturn,IsReadOnly。

6.4.2 选择文本

6.4.3 拼写检查

SpellCheck.IsEnabled,设置自定义的字典等等。

6.4.4 PasswordBox

6.5 控件列表

ItemControl类添加了所有基于列表的控件都是用的基本功能。使用数据绑定, 将ItemSource属性设置为希望显示的具有数据项集合的对象。

6.5.1 ListBox

可以嵌套任意元素

6.5.3 ComboBox

ComboBox一次只能选择一项。

6.6 基于范围的控件

未看

6.7 日期控件

未看

第七章 Application类

7.1 应用程序的生命周期

7.1.1 创建Application对象

7.1.2 派生自定义的Application类

你可能感兴趣的:(wpf编程宝典笔记)