WPF 读书笔记之一 开篇 (Applications=Code+Markup)

从头到尾的看完了这本书,学习到很多,由于接触WPF 的时间有点晚,其实早就已经接触了只是没有系统的学习和了解。工作之余学习Petzold的这本书《Applications=Code+Markup》. 对于WPF的了解和提供非常有帮助。

书中有很多例子,都一一的动手做了,有些地方非常的巧妙,作为学习者,非常有必要记录下学习的过程以及在学习中吸取到的知识,也希望在这里和大家一起交流,更希望学习到更多,因为书本知识毕竟有限。

其他话也就不多说了,重头将书来一次,和大家一起进步和提高。突然想起了一个电影里面的台词:

A:您好,先生,我看你的书看了两遍..

B:难道第一次没有看懂?

应该是这样的,我虽然将书本的31章过了一次,基本的概念也理论都了解,实践也很多,但是WPF的强大不能不让人折服,不懂,确实不懂,知识的浩瀚真是可怕啊。

 

既然我们要选择WPF,必须了解它的特性,那么它的优点是什么呢?我查找了下资料,转载了以下内容(因为总结的4点已经足够):

[转自:http://blog.csdn.net/xiaomin98/archive/2008/02/22/2113785.aspx]

1.它是所有用户体验的类的集合。使用统一的XAML,标签语言进行编程。

     以往的用户体验分别由以下不同部分组成。

    1.用户可视控件。

    2.图形。GDI+

    3.高级多媒体性能。DirectX

     以上三种编程模型各有区别。要掌握起来都不容易。比如DirectX或者自定义外观控件。

     WPF对以上部分设计的DLL再次封装。把表现层抽象出来成为一个整体概念。并且使用声明式语言XAML进行编程。(其实编译后还是变成面向对象的语言VB.NET,c#,或者直接IL语言)。它简化了UI的编程,对于开发人员来说,可以更加专注于程序的实现,而不需要为了界面而花费太多时间,因为那实在应该属于界面设计人员的工作。

2.XAML标签语言自由组合,使得所有控件可以任意嵌套。这项特性对于写自定义外观的控件来说是一个效率的大飞跃。

3.提供了专门的界面开发工具。是界面开发人员和程序开发人员分工更明确。 Expression Studio系列工具

4.整合了web开发和windows开发的模式。web的界面开发使用的是html和asp.net服务器组件的标签式语言,而XAML也是标签语言。

[转自:http://blog.csdn.net/xiaomin98/archive/2008/02/22/2113785.aspx]

 

当然,更重要的一点就是Microsoft对此提供的支持,以及通过学习之后我发现,离开Winform,控件开发居然可以这么容易。

1 . 定制模板样式。 可以给控件自定义模板,并应用样式,就好比HTML+CSS的感觉。

2.  绑定。 WPF的XAML代码能够方便的与后台绑定并交互,这个将在后面的学习过程中提到。

3. 依赖属性(DependencyProperty) . 嗯,个人感觉很好用。 因为它只有依赖属性支持绑定…很重要

其他的以上差不多都提到了,学习的过程中将会一一遇到。

 

学习新的知识免不了开始”Hello World!”, 嗯,这个是为了向大家表明:我,开始学什么什么了。(其实跟我胡汉三又回来了一个味道)。好吧,那就开始”Hello World!”吧。

书从头到尾没有一张图,没有关系,我会加上的. 之所以书名为Code+Markup是因为书的第一部分10多章节全部都是建立Console Application。至于怎么建立控制台应用程序就不需要我多说了吧?(因为作者在写书的时候,VS 2008没有诞生,所以VS没有WPF的空白模板,没有办法,哈哈,但是现在2010我都在用了,所以很方便) 看代码:

using System;
using System.Windows;

namespace Petzold.SayHello
{
    class SayHello
    {
        [STAThread]
        public static void Main()
        {
            Window win = new Window();
            win.Title = "Say Hello";
            win.Show();

            Application app = new Application();
            app.Run();
        }
    }
}

代码很简单,首先来讲解一下。

一个WPF的应用程序必须有并且至多有一个Application实例。但是可以包含很多Window。前面提到这是一个Console Application,如果单纯的控制台应用肯定是会编译失败的,我们需要添加3个引用:

PresentationCore

PresentationFramework

WindowsBase

那么他们包含什么呢? 我们用Object Browser看下:

Untitled

这里面包含了WPF编程的所需要的所有命名空间。(没有晕? 我已经晕了…)

好了,CTRL+F5就执行吧。会弹出一个窗口,窗口的标题为:Say Hello。

 

 

本书源代码都可以通过以下链接得到:http://www.microsoft.com/mspress/companion/0-7356-1957-3

本书的下载地址:http://www.charlespetzold.com/wpf

转载于:https://www.cnblogs.com/tobemvp/archive/2010/08/03/1791327.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Adorner是WPF中一种特殊的视觉元素,可以用于在其他元素上添加装饰或者附加功能。Adorner通常用于实现在用户界面上的一些特殊效果,比如鼠标悬停提示、错误提示、操作提示等。 Adorner需要继承自Adorner类,并在构造函数中调用基类的构造函数,并将需要装饰的元素作为参数传递进去。Adorner类中有一个AdornedElement属性,用于获取被装饰的元素。 Adorner类中有一个OnRender方法,用于绘制Adorner的外观。在OnRender方法中可以使用DrawingContext来绘制Adorner的外观,也可以使用VisualBrush来填充Adorner的内容。 Adorner的使用方法: 1. 创建一个Adorner类,继承自Adorner类,并在构造函数中调用基类的构造函数,并将需要装饰的元素作为参数传递进去。 2. 重写Adorner类的OnRender方法,用于绘制Adorner的外观。 3. 在需要装饰的元素上调用AdornerLayer.GetAdornerLayer方法获取AdornerLayer对象。 4. 调用AdornerLayer的Add方法,将Adorner添加到AdornerLayer中。 下面是一个简单的例子: ```csharp public class MyAdorner : Adorner { public MyAdorner(UIElement adornedElement) : base(adornedElement) { } protected override void OnRender(DrawingContext drawingContext) { base.OnRender(drawingContext); // 绘制Adorner的外观 drawingContext.DrawEllipse(Brushes.Red, null, new Point(AdornedElement.RenderSize.Width / 2, AdornedElement.RenderSize.Height / 2), AdornedElement.RenderSize.Width / 2, AdornedElement.RenderSize.Height / 2); } } // 在需要装饰的元素上添加Adorner var adornedElement = new Button { Content = "Click me!" }; var adornerLayer = AdornerLayer.GetAdornerLayer(adornedElement); var myAdorner = new MyAdorner(adornedElement); adornerLayer.Add(myAdorner); ``` 这个例子中,我们创建了一个MyAdorner类,继承自Adorner类,并重写了OnRender方法,在OnRender方法中绘制了一个红色的圆形。然后我们创建了一个Button元素,并将其作为参数传递给MyAdorner的构造函数,创建了一个AdornerLayer对象,并调用Add方法将MyAdorner添加到AdornerLayer中,从而实现了在Button元素上添加了一个红色的圆形装饰器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值