WPF编程宝典

论坛 期权论坛 脚本     
已经匿名di用户   2022-7-2 21:51   3255   0

第一章:WPF概述
WPF底层的图形技术不再是GDI/GDI++,而是DirectX.
对于特定服务,WPF仍依赖于user32,例如,处理和路由输入信息以及区分哪个应用程序实际拥有屏幕的哪
一部分,但是,所有绘图操作老师由DirectX完成。
Silverlight使用WPF平台的一个子集,通过一个插件可以把它驻留于任何现代浏览器中,并且对其他OS开放。
WPF多层体系结构,在顶层应用程序和一个完全由托管的c#代码编写的一组高层服务进行交互,至于将.NET对象
转换为Direct3D由后台milcore.dll的低级非托管组件完成。

在windows窗体编程中,窗体中的所有可视化内容都被称为控件,在WPF中,不再如此,可视化内容被称为元素(element),只有部分元素是控件。

第二章:XAML


第三章:布局
窗口布局原则:不应显式设定元素的尺寸;不应使用屏幕坐标指定元素的位置;布局容器和它们的子元素“共享”可以使用的空间;
可以嵌套布局容器。
System.Windows.Controls.Panel: 派生所有WPF布局容器
StackPanel
WrapPanel
DockPanel 根据容器的整个边界调整元素
Grid 根据一个不可见的表格在行和列中安排元素。这是最灵活最常用的容器之一。
UniformGrid
Canvas
Border 控件不是一个布局面板,而是元素,它只能包含一段嵌套内容(通常是布局面板),并且为其添加背景或在其周围添加边框。
<Button Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="1" Grid.RowSpan="3">Top Left</Button>
RowSpan告诉button占用3行

Canvas面板适用需要构建其他一些不同的内容,绘图表面,Canvas.ZIndex附加属性来控制它们的层叠方式。
<Canvas ClipToBounds="True">其中ClipToBounds Canvas会裁剪溢出控件内容

第四章:依赖项属性
public static readonly DependencyProperty MarginProperty;
根据约定,定义依赖项属性的字段的名称为在普通属性的末尾加上单词“Property".//DependencyProperty 类名
DependencyProperty只能使用静态的DependencyProperty.Register()实例DependencyProperty对象

第五章:路由事件
WPF通过事件路由的概念增强了.NET事件模型。
public static readonly RoutedEvent ClickEvent;
EventMangager.RegisterRoutedEvnet()方法注册。
路由事件通过普通的.NET事件进行包装,从而使所有的.NET语言都能够访问它们。事件包装器可以使用AddHandler(),
RemoveHandler()方法添加和删除已注册的调用程序。
RoutedEventArgs e = new RoutedEventArgs(ButtonBase.ClickEvent,this);
base.RaiseEvent(e);
路由事件实际上以下列三种方式出现:
1.Direct event 如:MouseEnter事件,源于一个元素,并且不传递给其他元素。
2.Bubbling event. MouseDown
3.Tunneling event 隧道路由事件,在事件到达恰当的控件之前为预览事件提供了机会,与冒泡事件方向相反,并以Preview开头

RoutdEventArgs类的属性
Source 事件源控件
RoutedEvent 通过事件处理程序为触发的事件提供RoutedEvent对象,如果使用同一个事件处理程序处理不同的事件,这信息是非常有用的。
Handled 该属性允许终止事件的冒泡或剖隧道过程。

<StackPanel Button.Click="DoSomething" Margin="5">
<Button Name="cmd1">Command 1</Button>
<Button Name="cmd2">Command 2</Button>
<Button Name="cmd3">Command 3</Button>
...
</StackPanel>
pnlButtons.AddHandler(Button.Click, new RoutedEventHandler(DoSomething));

PreviewMouseUp事件 隧道事件
MouseUp事件 冒泡事件
如果将隧道跌幅事件标记为已处理过,那么冒泡路由事件就不会发生,这是因为两个事件共享同一个RoutedEventArgs类的实例。

事件分类5类:
生命周期事件: Initialized/Loaded/Unloaded/Activated/Deactivated/Closing/Closed
鼠标事件:
键盘事件: PreviewKeyDown/keyDown/PreviewTextInput/TextInput/PreviewKeyUp/KeyUp
手写笔事件:
多点触控事件:

..................

第23章:窗口

Window类: Show(),ShowDialog()
ShowDialog()显示模态窗口,锁住所有鼠标和键盘输入来阻止用户访问父窗口,直到模态窗口被关闭。
窗口所有权,当所有者窗口最小化时,被拥有的窗口也会被最小化,当相互重叠时,被拥有的窗口总是显示在上面。
DialogWindow dialog = new DialogWindow();
if(dialog.ShowDialog() == true)
{
DialogResult为true null是DialogResult初始值
检查其他属性以获取它所需的信息
}
else
{
}
WPF对话框模型相比Window窗口,WPF按钮没有提供DialogResult属性。
WPF手动移动窗口在任何时候都可以通过调用Window.DragMove()方法启动窗口拖动模式。
改变形状窗口的尺寸Window.ResizeMode设置为CanResizeWithGrip

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP