`
andyjackson
  • 浏览: 58358 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

WPF学习笔记——XAML与wpf

阅读更多

 

      XAML 是一种基于 XML 语法的用来创建 .NET 对象树的语言。从严格意义上来讲, XAML WPF 是相互独立的。 XAML 更多的算是一种技术,并不是专门供 WPF 使用的。比如 WWF(Windows Workflow Foundation) 就能够用 XAML 表示工作流。 XAML 本质上只是一种用于构建 .NET 对象树的语言,与 WPF 框架没有特殊的关联。下面了解一下 XAML 编译器的工作原理。

命名空间

         XAML 使用 XML 命名空间来表示 .NET 命名空间,但是他们之间并不是一对一的通信。一个 XML 命名空间可以包含若干个 .NET 命名空间。有两种方式实现:

         第一种是将 XmlnsDefinitionAttribute 应用于那些将要包含在 XAML 中进行访问的类型。 [assembly:XmlnsDefinition(“http://...”,”mynamespace”)]

         第二种是通过查找命名空间中的类型的方式: xmlns:local="clr-namespace: Samples;assembly=" 。如果 ”clr-namespace:” 后面没有分号,那么它之后的都当做 namespace 来解析,而该命名空间一定在当前程序集中;否则, assembly 后面跟的就是程序集信息。

生成类

         x:Class="OpenXMLWriter.Window1"

子元素

         XAML 编译器会将子元素加到他的 Child Children Content 属性中,这要根据具体的控件而定。

属性

         由于 XAML 中只能够表示文本属性,更准确的说是 String 属性,因此在表示其他类型的属性,如 int 型时,就需要一种类型转换器。对于内置的元素控件系统已经自带了 TypeConverter

         实例:(这里用到了属性元素语法,即 Parent.PropertyName

        < Button VerticalAlignment ="Center" HorizontalAlignment ="Center">

            < Button.Background >

                < LinearGradientBrush StartPoint ="0,0" EndPoint ="0,1">

                    < LinearGradientBrush.GradientStops >

                        < GradientStop Offset ="0" Color ="#800"/>

                        < GradientStop Offset ="0.35" Color ="Red"/>

                    </ LinearGradientBrush.GradientStops >

                </ LinearGradientBrush >

            </ Button.Background >

        </ Button >

等价于:

            Button b = new Button ();

            b.VerticalAlignment = VerticalAlignment .Center;

            b.HorizontalAlignment = HorizontalAlignment .Center;

            LinearGradientBrush brush = new LinearGradientBrush ();

            brush.StartPoint = new Point (0, 0);

            brush.EndPoint = new Point (0, 1);

            GradientStop gs = new GradientStop ();

            gs.Offset = 0;

            gs.Color = Color .FromRgb(0x80, 0, 0);

            brush.GradientStops.Add(gs);

            gs = new GradientStop ();

            gs.Offset = 0.35;

            gs.Color = Colors .Red;

            brush.GradientStops.Add(gs);

            b.Background = brush;

 

       XAML 还支持附加属性。例如:

              < Button my : Foo.Bar ="Blue"   Name ="btn"/>

       然后在 Foo 类中自定义了一个附加属性:

       public void SetBar(DependencyObject target, Brush b){………….}

       最后等价于: Foo.SetBar(btn, Brushes.Blue);

扩展标记 (Markup extensions)

         扩展标记类派生自 System.Windows.Markup.MarkupExtention ,他的使用,使属性的值更加灵活,在运行时决定其值。

    public abstract class MarkupExtension

    {

        protected MarkupExtension() { }

        public abstract object ProvideValue(IServiceProvider serviceProvider);

    }

         XAML 通过两种方式将数据传递给扩展标记:

         第一种是构造函数。 < Style TargetType ="{ x : Type Button }"></ Style > 编译时, TypeExtension te = new TypeExtension ("Button" );

       第二种是设置属性,通过 PropertyName=Value 的方式。

       < TextBlock Text ="{ Binding Path =p, Mode =OneTime, Source ={ StaticResource sn }}"/>

编译后,会生产如下的代码:

                       Binding bi = new Binding ();

            bi.Path = new PropertyPath ("p" );

            bi.Mode = BindingMode .OneTime;

            bi.Source = FindResource("sn" );  

 

       WPF 提供了许多内置的扩展标记,其中以 x: 为前缀的位于 XAML XML 命名空间中,其他的位于 WPF 的命名空间中。

 

类型

说明

x:NullExtension

用来表示空值,在编译时进行求值。

< Button Background ="{ x : Null }"/> 表示将颜色属性设置为 null

x:TypeExtension

获得对象的类型,在编译时进行求值。

< Style TargetType ="{ x : Type Button }"></ Style >

x:ArrayExtension

创建一个数组。这个并不是很常使用,由于一个组可以包含多个选项,因此该标记可以有子元素。基于这个原因,他是单独作为一个标记。

< x : ArrayExtension Type ="{ x : Type Brush }" x : Key ="brushes"></ x : ArrayExtension >

x:StaticExtension

获得静态属性的值。将目标属性设置成指定静态属性或字段的值,参数形式通常为: Class.Member

< TextBlock Background ="{ x : Static Class .Member}" / >

StaticResourceExtension

执行一次资源搜索。等价于使用了 FindResource 方法,通过名称返回指定资源的值。

< TextBlock Background ="{ StaticResource key }" Name ="myText"/>

DynamicResourceExtension

创建资源绑定。他将属性值与指定的资源关联起来,会跟着资源的改变而改变。

ComponentResourceKey

为跨组件系统资源的引用创建一个资源关键字。

Binding

创建一个数据绑定

RelativeSource

创建一个 RelativeSource 用于数据绑定。

TemplateBinding

用于连接控件模板中的属性和模板化控件中的属性。

  • 大小: 167.7 KB
分享到:
评论

相关推荐

    dotnet 读 WPF 源代码笔记 XAML 创建对象的方法.rar

    本文将基于“dotnet 读 WPF 源代码笔记 XAML 创建对象的方法”这一主题,深入探讨如何通过XAML语言来创建和管理WPF应用中的对象。 XAML(Extensible Application Markup Language)是微软为构建WPF、Silverlight和...

    中文版WPF学习笔记

    **中文版WPF学习笔记** Windows Presentation Foundation(WPF)是微软.NET Framework的一部分,它为开发者提供了构建桌面应用程序的强大工具和框架。WPF是Windows Vista操作系统引入的一个关键特性,极大地扩展了...

    WPF学习笔记

    ### WPF学习笔记 #### Application概述 在WPF框架中,`Application`类扮演着核心的角色,它负责管理应用程序的生命周期、初始化与关闭等全局行为。`Application`类的使用非常关键,它确保了程序能够按照预期的方式...

    WPF 学习笔记(包含Application、Navigation、XAML等等)

    ### WPF学习笔记知识点概述 #### 一、Application **Application** 在 WPF 中扮演着极其重要的角色,它是应用程序的入口点,负责管理程序的生命周期。与 WinForms 的设计不同,WPF 中的 **Application** 类默认由...

    WPF知识学习笔记总结

    这只是WPF学习笔记的冰山一角,WPF还包括但不限于数据绑定、依赖属性、控件模板、样式、布局管理、资源字典、MVVM模式、命令和路由事件等多个重要知识点。理解并掌握这些知识点,将有助于你构建功能强大、美观的桌面...

    wpf经典代码集合 wpf经典学习笔记 wpf从菜鸟到精通

    综上所述,"wpf经典代码集合 wpf经典学习笔记 wpf从菜鸟到精通" 提供了一套完整的WPF学习资源,无论你是刚接触WPF的新手,还是希望深化技能的开发者,都可以从中受益。通过深入学习这些内容,你将能够熟练运用WPF...

    WPF Sliverlight最新学习笔记

    **WPF学习笔记.docx**文档可能深入探讨了WPF的具体技术细节,如动画、效果、数据可视化、控件扩展等,并包含实践案例和常见问题解答。 总的来说,"WPF Silverlight最新学习笔记"这套资料全面覆盖了WPF的基础知识和...

    WPF学习笔记之资源基础DEMO

    - **静态资源**:当声明为静态资源时,WPF会在解析XAML时一次性创建资源,然后在整个应用生命周期中重用。这提高了性能,但无法在运行时动态更改。 - **动态资源**:与静态资源不同,动态资源会在每次请求时进行...

    学习WPF的笔记

    本文从多个方面介绍了WPF的基础知识和技术要点,包括`Application`的初始化与启动、`Dispatcher`的工作原理、导航与路由事件的应用、XAML语言的特点、依赖属性的实现方式以及资源管理和数据绑定的技术细节。...

    WPF Binding 学习笔记

    【WPF Binding 学习笔记】 WPF (Windows Presentation Foundation) 的数据绑定是其核心特性之一,它使得UI层和业务逻辑层之间的数据交互变得简单而直观。在WPF中,数据绑定允许UI控件(目标)动态地显示或响应数据...

    dotnet 读 WPF 源代码笔记 提升调试效率的 NamedObject 类型.rar

    总的来说,这份笔记资料提供了对WPF核心组件——NamedObject类的深入分析,并结合OpenXML技术,为我们提供了一条提升开发和调试效率的途径。通过学习这些内容,开发者可以增强对WPF框架的理解,从而创建出更加优秀和...

    C# WPF经典集合

    第二本书《wpf深入浅出 wpf学习笔记》可能是作者个人的学习心得和总结,通常这样的书籍或笔记会包含作者在实践过程中遇到的问题及解决方案,对初学者而言尤其有价值。它可能涵盖了实际项目开发中的常见问题、技巧和...

    wpf 学习资料(2)

    在标题提到的“**wpf 学习资料(2)**”,这表明这是一个关于WPF学习的系列资源的第二部分,可能包含了进阶的学习内容或者更深入的实践项目。 描述中提到,“**自己在学习WPF时看过的所有资源,希望对大家有所帮助**...

    dotnet 读 WPF 源代码笔记 为什么加上 BooleanBoxes 类.rar

    作为开发案列优质学习资料,这篇笔记可能包含了作者在阅读WPF源代码时发现的技巧、最佳实践,以及对BooleanBoxes类的深入分析。它可能是通过实际项目或实验来展示如何在特定场景下使用这些知识的。例如,笔记可能...

Global site tag (gtag.js) - Google Analytics