WPF学习:1.开始

  最近在学校赶毕业论文,忙里偷闲学习一些WPF,可能以后工作会用到。在CodeProject里找到一些WPF的教程,也尝试在把它翻译成中文,一方面在这个过程中可以学下WPF,另一方面也尝试养成一个总结汇总的习惯,希望自己以后能够多多在博客园这个平台上交流学习。

  codeProject地址连接:http://www.codeproject.com/Articles/140611/WPF-Tutorial-Beginning

  代码地址:http://feed.cnblogs.com/blog/u/143816/rss

  

Windows Presentation Foundation

         WPF(Windows Presentation Foundation)是伴随着.NET framework3.0发布的一个新类和组件集合,它是一个新的结构,方便编程人员更灵活和有效的设计界面。

WPF的一些新特性

  1. 基于密度的方法独立于DPI设置,自适应调整界面的大小
  2. 风格和控件模板的重定义
  3. 控件中基于方法的资源
  4. 新的属性系统和捆绑能力

XAML

         应用程序标记语言,元素和对象都是可见的静态的,用于应用程序用户界面而创建的一种新的描述性语言。逻辑功能还需要通过VB或C#实现。

WPF架构

         托管层:WindowBase.dll,PresentationFramework.dll,PresentationCore.dll

         非托管层:milcore.dll,WindowsCodecs.dll

         核心API:Direct3D,User32,GDI & Device Drivers

WPF一些必须知道的术语

1.     调度和线程关联

WPF程序开始时自动启动两个线程:Rendering和Dispatcher。

Rendering:对于用户隐藏,在程序中无法直接调用。

Dispatcher:UI线程,关联到所有的元素。

不能再Dispatcher线程之外改变任何元素,想要调用或者进入组件必须调用Dispatcher。

2.     逻辑树和视觉树

         逻辑树:包含在XAML声明的所有控件。

         视觉树:对用户而言是“黑盒”,暴露视觉实现的所有细节。用户无法直接处理视觉书,                          因为他需要知道控件包含的所有细节。

3.     路由事件

         提供一种简单的事件处理方式,相比与CLR事件,对WPF提供更好的支持,为WPF提供更灵活的执行方式。

         常见的路由时间方式:

        冒泡:事件源向上一直到根。

         隧道:根部调用事件处理程序向下深入到事件源。

         直接:只有事件源才有机会响应时间(CLR事件)。

         一般情况以隧道/冒泡事件为主,隧道前缀preview

4.     依赖属性

         扩展CLR属性的功能,由WPF属性系统支持的属性

         1.避免因继承而带来的对象膨胀。每次继承,父类的字段都被继承,这样,继承树的低端对象不可避免的膨胀。

         2.大多数字段并没有被修改,一直保持着构造时的默认值,把这些字段从对象中剥离开来,减少对象的体积。

5.     硬件加速和图形渲染

         自动检测硬件加速并自动的做出响应的调整。

对象层次

         DispatcherObject:所有控件的母线程-UI线程

         DependencyObject:对于依赖属性构建一个observer

         Visual:托管库和milcore的连接

         UIElement:增加像布局,输入,事件等WPF特性的功能支持

         FrameworkElement:UIElement的执行

         Shape:所有圆的基类

         Control:和用户进行交互的UI元素。

         ContentControl:所有控件的基类,只有一些简单的内容

         ItemsControl:所有控件的基类。

         Panel:所有panel的基类。

 

 

建立第一个WPF程序

         一开始建的程序有两个xmal:App.xaml:程序描述,包含了类名,启动的UI。Window1.xaml:UI描述,主要的界面设计。逻辑功能在相应的.cs文件中。下面描述窗体基本的特性:

代码:

<Window x:Class="FirstWindowsApplication.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="63*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition MinWidth="50" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <TextBlock Text="Enter Name :" Grid.Row="0" Grid.Column="0" />
        <TextBox x:Name="txtName" Grid.Row="0" Grid.Column="1" MinWidth="50"/>
        <Button Content="Click Me" Grid.Row="0" Grid.Column="2" Click="Button_Click"/>
    </Grid>
</Window>

  

         Height:窗体高度。Width:窗体宽度。Title:窗体的文本。

         <Grid>界面的布局

                    RowDefinitions

                    ColumnDefinitions 将网格拆分为一个个单元格,有几个RowDefinitions代表分成几行,几个ColumnDefinitions代表分成几列。大小有“数值”,“Auto”和*。

         Button中的Click触发路由事件。

 

                                                                                                                                      似水无痕:http://www.cnblogs.com/keylei203/

posted @ 2013-03-09 17:28  似水无痕keylei  阅读(704)  评论(0编辑  收藏  举报