总结下学习WPF的笔记,方便查阅 
1   编译 
添加程序集引用:WindowsBase.dll,PresentationCore.dll,PresentationFramework.dll 
2  布局 Layout 
Grid 
<Grid VerticalAlignment="Top" HorizontalAlignment="Left" ShowGridLines="True" > 
        <Grid.RowDefinitions> 
            <RowDefinition/>   <RowDefinition/> 
        </Grid.RowDefinitions>      
<Button Width="125"  Grid.Row ="0" >Add Column</Button> 
<Button Width="125" Grid.Row="1" >Delete Column</Button> 
</Grid> 
DockPanel 
<DockPanel LastChildFill=”true”> 
<Button Width="125" DockPanel.Dock=”Top” >Add Column</Button> 
<Button Width="125" >Delete Column</Button> 
</DockPanel> 
StackPanel 
<StackPanel HorizontalAlignment="Left" >  
<Button Width="125"  >Add Column</Button> 
<Button Width="125" >Delete Column</Button> 
</StackPanel> 
Canvas 
<Canvas Background=”Yellow”> 
<Button Width="125"  >Add Column</Button> 
<Button Width="125" >Delete Column</Button> 
</Canvas> 
3  控件 Control 
WPF的控件模型 WPF中几乎任何的控件(Element)都可以作为一个容器存在,在它的Content属性中包含其他任何你想要显示的内容,不仅仅是字符串。 
这个特性有点像ASP.NET中GridView的Template列,可以在模板列中放任何控件。 
1) Button <Button Width="125"  >Add Column</Button> 
2)<TextBox Height="23" Name="textBox1" Width="120" /> 
3) TextBlock <TextBlock FontSize="18"  FontStyle="Italic"> Hello, world! </TextBlock> 
4) ComboBox 
<ComboBox Height="23" Name="comboBox1" Width="120"> 
            <ComboBoxItem>A</ComboBoxItem> 
            <ComboBoxItem>B</ComboBoxItem> 
</ComboBox> 
5)  ListBox 
<ListBox Height="100" Name="listBox1" Width="120"> 
           <ListBoxItem>A</ListBoxItem> 
           <ListBoxItem>B</ListBoxItem> 
  </ListBox>

4 样式Style ,资源Resource 
样式 
1) inline 样式 内联样式 
<Button Name="btnOK"> 
            <Button.Style> 
                <Style> 
                    <Setter Property="Button.FontSize" Value="32"></Setter> 
                    <Setter Property="Button.FontWeight" Value="Bold"></Setter> 
                </Style> 
            </Button.Style> 
        </Button>

2) named样式 命名样式 
<Window.Resources>   
<Style x:Key ="MyStyle">   
<Setter Property ="Button.FontSize" Value ="20"/>   
  <Setter Property ="Button.Background">   
  <Setter.Value>   
        <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">   
           <GradientStop Color="Green" Offset="0" />   
           <GradientStop Color="Yellow" Offset="0.25" />   
           <GradientStop Color="Pink" Offset="0.75" />   
          <GradientStop Color ="Red" Offset="1" />   
       </LinearGradientBrush>   
     </Setter.Value>   
</Setter>   
</Style>   
</Window.Resources>   
使用命名资源的方法 
<Button  Name="btnClickMe" Height="80" Width = "100" 
Style ="{StaticResource MyStyle}"

注意:别忘记在窗体的声明代码引入命名空间 
xmlns:x="clr-namespace:System;assembly=mscorlib"

资源 添加页面资源 
<Window.Resources> 
       <SolidColorBrush x:Key="Foo" Color="Green"></SolidColorBrush> 
       <x:String x:Key="Hello">Hello,World</x:String> 
   </Window.Resources> 
定义应用程序资源的方式如下 
<Application.Resources> 
       <SolidColorBrush x:Key="Foo" Color="Green"></SolidColorBrush> 
       <x:String x:Key="Hello">Hello,World</x:String> 
   </Application.Resources> 
读取代码 
Brush b=(Brush)this.Resources[“Foo”]; 
String s=(string) this.Resources[“Hello”]; 
也可以用FindResource 和TryFindResource,前者找不到资源会抛出异常,后者找不到资源返回null 
资源范围:Application 应用程序资源,Page/Windows窗体资源 
应用程序资源适用于当前项目的所有窗体,窗体资源适用于它所在的窗体 
WPF的资源可以包含所有的任意CLR对象,该对象必须要有一个默认的构造函数和独立的属性。 
资源的加载形式 
Static资源 静态资源,定义在xmal文件中 
Dynamic资源 动态资源 在CS文件中定义

5 数据绑定 Data Binding 
举例,ComboBox绑定系统字体 
<ComboBox ItemsSource=”{ x:Static Fonts.SysetemFontFamilies }”/> 
注意要加xmlns:x="clr-namespace:System;assembly=mscorlib" 
绑定自定义对象 可以直接在资源中定义对象,然后绑定给控件 
如果要创建变化通知的CLR绑定对象,该对象必须实现INotifiyPropertyChanged。可以理解为当数据值变化后,绑定数据值的element自动更新,当element的值更新后,对象的绑定对象值也会更新。

6 XAML的编译过程 
对于一个Foo.xaml文件 
1 调用解析器解析Foo.xaml ,使用System.Xml.XmlTextReader读取并解析 
2 markup编译器调用Baml writer在obj\release目录中产生Foo.baml 
3 markup编译器生成一个partical类保存到Foo.g.cs文件中 
如果需要反编译WPF的项目时,需要使用插件Reflector.BamlViewer.dll 
 
如图,WPF初试化时加载界面文件XAML文件,界面文件被编译成Baml,这个文件是二进制的。 
 
通过BamlViewer插件,可以还原界面XAML文件。

对WPF研究的很肤浅,目前也只限于把服务器类的程序(比如WCF服务器端)驻留在WPF中,体会一下它的编程模型。先开始会用它做些项目的小工具,数据维护工具之类的应用,等把它研究透了,并且小组的成员都会这项目技术,再应用于实际的项目。

http://www.cnblogs.com/JamesLi2015/archive/2010/02/27/1674822.html

WPF开发学习笔记(转)的更多相关文章

  1. WPF开发学习笔记

    1.命名规范: 插件名称统一以:CI.Client.Plugins.SYS.+TableName   eg:CI.Client.Plugins.SYS.EnterPrise 2.插件文件目录: 3.D ...

  2. 【前端】移动端Web开发学习笔记【2】 & flex布局

    上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...

  3. 【前端】移动端Web开发学习笔记【1】

    下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...

  4. 驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址

    驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址 最近重新看了乾龙_Heron的<ARM 上电启动及 Uboot 代码分析>(下简称<代码分析>) ...

  5. android开发学习笔记000

    使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个 ...

  6. 高性能Cordova App开发学习笔记

    高性能Cordova App开发学习笔记 文件结构 添加插件 构建准备 各个www的作用,prepare命令会将hello\www的内容会拷贝到platform下的wwww目录,知道该改哪里了吧?如果 ...

  7. Rest API 开发 学习笔记(转)

    Rest API 开发 学习笔记 概述 REST 从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表示方式.获得这些表徵致使这些应用程序转变了其状态.随着 ...

  8. 步步为营 SharePoint 开发学习笔记系列总结

    转:http://www.cnblogs.com/springyangwc/archive/2011/08/03/2126763.html 概要 为时20多天的sharepoint开发学习笔记系列终于 ...

  9. Kinect开发学习笔记之(一)Kinect介绍和应用

    Kinect开发学习笔记之(一)Kinect介绍和应用 zouxy09@qq.com http://blog.csdn.net/zouxy09 一.Kinect简单介绍 Kinectfor Xbox ...

随机推荐

  1. java提高同步锁的几点建议

    1.减少锁的持有时间,只对关键的代码块加锁,减少synchronized锁内部的无关模块: 2.减小锁粒度,如Collections.synchronizedMap(map)返回线程安全的map会锁整 ...

  2. idea 的IDE

    idea 是与eclipse齐名的IDE(集成开发工具),以智能闻名,不过对于熟悉eclipse的的用户来说,初次接触idea有些让人搞不清方向,下面介绍一下简单的使用 方式. 1.安装 官网下载ul ...

  3. Android TextView setText卡顿问题

    TextView 是经常使用控件之中的一个,最经常使用的方法是setText()  . 可是 我们在显示大量的文本的时候,使用setText还是会有一些性能的问题. 这篇文章 关于TextView的s ...

  4. ios -- 极光推送《3》 pod 方法

    iOS SDK 集成指南 SDK说明 适用版本 本文匹配的 SDK版本:r2.1.5 以后.查看最近更新了解最新的SDK更新情况.使用Xcode 6及以上版本可以使用新版Push SDK,Xcode ...

  5. python 基础 9.1 连接数据库

    二.数据库连接 MySQLdb 提供了connect 方法用来和数据库建立连接,接收数个参数,返回连接对象: #/usr/bin/python #coding=utf-8 #@Time   :2017 ...

  6. python 基础 2.7 range与xrange的区别

    #/usr/bin/python #coding=utf-8 #@Time :2017/10/25 19:22 #@Auther :liuzhenchuan #@File :range与xrange的 ...

  7. WebApi 传参详解(转)

    一.无参数Get请求 一般的get请求我们可以使用jquery提供的$.get() 或者$.ajax({type:"get"}) 来实现: 请求的后台Action方法仍为上篇文章中 ...

  8. 在java项目中使用protobuf

    1 通用方式 第一步,定义数据结构 第二步,使用protoc.exe生成java代码 第三步,序列化 第四步,反序列化 2 grpc方式 grpc官方推荐的方式,通过maven插件来生成java代码. ...

  9. mysql系列之3.mysql进阶

    启动原理 mysqld脚本-->mysqld_safe脚本-->mysqld服务-->启动mysql 强制关闭mysql: 三种方法, 不建议用! killall mysqld pk ...

  10. 流畅python学习笔记第十八章:使用asyncio包处理并发(二)

    前面介绍了asyncio的用法.下面我们来看下如何用协程的方式来实现之前的旋转指针的方法 @asyncio.coroutine def spin(msg): write,flush=sys.stdou ...