WPF编程宝典

第一章: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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值