知识大全 XAML(1)--物件生成

Posted 属性

篇首语:同时赶两只兔,一只也捉不到。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 XAML(1)--物件生成相关的知识,希望对你有一定的参考价值。

XAML(1)--物件生成  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  前言        XAML是微软推出的一种宣告式标记语言 采用XML的格式让开发人员设计应用程序编程接口 在微软近期推出的各种开发平台 例如WPF Silverlight WP 甚至Win 的Metro style app开发上都可以看到XAML的身影 XAML可以这么的神奇的跨平台运作 是因为XAML不涉足执行平台的运作 机制…等等 只单纯的依照开发人员的设计 建立对应的对象让执行平台使用 例如         XAML范例        <phone:PhoneApplicationPage        x:Class= XamlSample MainPage         xmlns=         xmlns:x=         xmlns:phone= clr namespace:Microsoft Phone Controls;assembly=Microsoft Phone         xmlns:d=         xmlns:mc= patibility/         mc:Ignorable= d d:DesignWidth= d:DesignHeight= >        <TextBlock x:Name= ShowTextBlock Text= Hello World FontSize= />        </phone:PhoneApplicationPage>        namespace XamlSample                public partial class MainPage : PhoneApplicationPage                public MainPage()                // Base        InitializeComponent()                                 Code范例        <phone:PhoneApplicationPage        x:Class= XamlSample MainPage         xmlns=         xmlns:x=         xmlns:phone= clr namespace:Microsoft Phone Controls;assembly=Microsoft Phone         xmlns:d=         xmlns:mc= patibility/         mc:Ignorable= d d:DesignWidth= d:DesignHeight= >        </phone:PhoneApplicationPage>        namespace XamlSample                public partial class MainPage : PhoneApplicationPage                public MainPage()                // Base        InitializeComponent()         // Create        TextBlock showTextBlock = new TextBlock()         showTextBlock Name = ShowTextBlock ;        showTextBlock Text = Hello World ;        showTextBlock FontSize = ;        this Content = showTextBlock;                                执行结果

  

        这两个WP 的范例程序 执行结果都是在画面上显示Hello World 而我们在程序代码里加入断点 来检视执行结果的对象(如下图) 可以看出两个范例最终产生的对象结构是相同的 也就是说 不管是使用XAML或是使用程序代码的方式来建构画面对象都是相同的NET会依照开发人员设计的XAML内容建立对象 就像是开发人员使用程序代码建立对象一样 理解这个范例之后 可以简单的说 XAML是用来产生对象的配置文件 执行平台使用XAML产生的对象 而 NET依照设定来产生对象是采用Reflection 我们也可以更广义的说「XAML是用来产生对象的Reflection配置文件」    

    XAML范例中断

  

        Code范例中断

  

        本篇文章采用「XAML是用来产生对象的Reflection配置文件」 这样的角度剖析XAML 来辅助开发人员理解XAML 并且知道是如何透过XAML来产生对象

        Object Element        下面这段XAML 代表一个TextBlock对象 当程序执行的时候 NET会剖析XAML Element来产生一个TextBlock对象 像这样会产生一个对象的XAML Element称为「Object Element」         <sample:TextBlock x:Name= ShowTextBlock Text= Hello World FontSize= xmlns:sample= clr namespace:System Windows Controls;assembly=System Windows />        有用过Reflection的开发人员 会知道组件名称 命名空间 类别名称 有这三项字符串数据就可以反射生成一个对象出来 在Object Element里 这三项数据也有各自设定的规范 依照XAML的规范来解读上面这个Object Element 可以得到 「组件名称」是System Windows 「命名空间」是System Windows Controls 「类别名称」则是TextBlockNET剖析Object Element之后 就会依照这些字符串数据 反射生成出一个TextBlock对象 将这个XAML Element取代Hello World范例里的TextBlock依然可以正常的显示Hello World         <phone:PhoneApplicationPage        x:Class= XamlSample MainPage         xmlns=         xmlns:x=         xmlns:phone= clr namespace:Microsoft Phone Controls;assembly=Microsoft Phone         xmlns:d=         xmlns:mc= patibility/         mc:Ignorable= d d:DesignWidth= d:DesignHeight= >        <sample:TextBlock x:Name= ShowTextBlock Text= Hello World FontSize= xmlns:sample= clr namespace:System Windows Controls;assembly=System Windows />        </phone:PhoneApplicationPage>        当然这样的XAML内容 看起来跟一般常见的XAML有所出入 一整个复杂了许多 因为XAML是由XML发展出来的 很多的格式沿用XML的规范 许多命名空间可以由上层的Element所提供 这样的规范大量减少XAML需要设定的数据内容 这部分有兴趣的开发人员可以参考XML的相关技术资料 另外各种开发平台也定义了一些默认的关键词 让XAML的设计可以变得更简洁 这部分有兴趣的开发人员可以参考开发平台的相关技术资料 以上面这个范例来说 因为是要产生开发平台预设的TextBlock 而这个开发平台预设的命名空间已经在PhoneApplicationPage做过宣告 所以可以将组件名称 命名空间都省略掉 XAML经过这些规范的简化之后 就可以产生出一般常见的XAML数据内容         Property Attribute        下面这段XAML 代表一个TextBlock对象 TextBlock对象有一个Text属性 当程序执行的时候 NET会剖析XAML Element来产生一个TextBlock对象 并且将这个TextBlock对象的Text属性设定为Hello World FontSize属性设定为 像这样会设定一个对象属性的设定 称为「Property Attribute」         <TextBlock x:Name= ShowTextBlock Text= Hello World FontSize= />        查询MSDN可以发现TextBlock的FontSize属性 是一个型别为System Double的属性 而XAML因为是XML的格式 所以被限制了只能输入字符串形式的数据 受于这样的限制 NET剖析Property Attribute的时候 会尝试将字符串数据转型为对象属性的型别 以下面这个范例来说 在执行的阶段会看到 NET的错误通知 告知无法将字符串数据转型为System Double         <TextBlock x:Name= ShowTextBlock Text= Hello World FontSize= Clark />        Property Element        在XAML的规范里 Property Attribute章节里的TextBlock范例 也可以写成下面范例的格式 将TextBlock的FontSize属性改写成为一对独立的标签 并且设定值写在标签的内容里 像这样设定一个对象属性的设定 称为「Property Element」         <TextBlock x:Name= ShowTextBlock Text= Hello World >        <TextBlock FontSize>                </TextBlock FontSize>        </TextBlock>

  

        Property Element的写法看起来有点多余 但其实这是为了XAML的延展性而设计 一般对象的属性有些不单纯是int double这些实值型别 也有可能是一个对象(Class) 一个结构(Struct) 而一个对象又会有属性 整个对象就是以树状结构生长下去 这时Property Attribute使用字符串来设定这个对象树状结构会显得力不从心 Property Element定义了 可以使用Object Element来当作内容来解决这个问题NET在剖析Property Element的时候 会将Object Element内容反射生成出对应的对象 设定为对象的对象属性 而使用Object Element来当作Property Element的内容另一个原因是 Object Element自己是描述一个对象 它又可以拥有自己的Property Attribute Property Element 这样就可以一层一层设计出对象的树状结构         下面这段XAML 采用Property Element来设定TextBlock对象的Foreground属性 而TextBlock对象的Foreground属性 是一个型别为Brush的对象属性 所以在Property Element里采用Object Element来生成要设定给Foreground属性的一个Brush对象         <TextBlock x:Name= ShowTextBlock Text= Hello World FontSize= >        <TextBlock Foreground>        <SolidColorBrush Color= #FF />        </TextBlock Foreground>        </TextBlock>

  

        仔细看上面的范例 会发现并不是生成一个Brush对象 而是生成Brush的延伸对象SolidColorBrush 这是因为Brush对象是一个抽象类 并没有办法直接生成 所以只能生成延伸自Brush的SolidColorBrush来当作Foreground属性的对象 这也就是说 我们可以生成延伸类别来设定对象属性 这是一个面向对象开发很重要的功能 提供了开发人员抽换对象的能力 大幅增加系统对象的弹性

        Property Element Collection        既然一般对象的属性不单纯是int double这些实值型别 有可能是一个对象(Class) 一个结构(Struct) 就免不了的对象的属性 也有可能是对象 结构的集合(Collection) Property Element另外也定义了 可以使用多个Object Element来当作内容来解决这个问题NET在剖析Property Element的时候 会将多个Object Element内容反射生成出对应的对象 并且加入对象的对象集合属性         下面这段XAML 采用Property Element来设定LinearGradientBrush对象的GradientStops属性 而LinearGradientBrush对象的GradientStops属性 是一个GradientStop型别的对象集合属性 所以在Property Element里采用多个Object Element 来生成要设定给GradientStops属性的多个GradientStop对象         <TextBlock x:Name= ShowTextBlock Text= Hello World FontSize= >        <TextBlock Foreground>        <LinearGradientBrush StartPoint= EndPoint= >        <LinearGradientBrush GradientStops>        <GradientStop Color= #FF Offset= />        <GradientStop Color= # FF Offset= />        <GradientStop Color= # FF Offset= />        </LinearGradientBrush GradientStops>        </LinearGradientBrush>        </TextBlock Foreground>        </TextBlock>

  

cha138/Article/program/net/201311/13682

相关参考

知识大全 使用XAML创建按钮

使用XAML创建按钮  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本演练的目的在于介绍如何创建

知识大全 理解XAML语法术语

理解XAML语法术语  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本主题定义用来描述可扩展应用

知识大全 WPF基础教程之XAML

WPF基础教程之XAML  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本主题介绍可扩展应用程序

知识大全 用VS2005开发XAML程序

用VS2005开发XAML程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!如果我们使用Visua

知识大全 我是农历87年11月13日生的,我物件是农历84年1月22日生的,请问,在农历11年(兔兔年)哪天结婚好

我是农历87年11月13日生的,我物件是农历84年1月22日生的,请问,在农历11年(兔兔年)哪天结婚好?谢谢!吉祥温馨提示---您的生肖**年类别:丁卯甲子我是农历87丁卯年11月13日生的,我物件

知识大全 找物件我要求从来不高为什么还是找不到物件

找物件我要求从来不高为什么还是找不到物件,我的要求也不高,为什么还是找不到物件选择配偶的最重要的条件是道德,没有道德必须放弃。如果你真的掌握了这个标准,这一生的幸福就有了保障。为什么我要求不高却找不到

知识大全 男女都三十多岁了相识处物件,男人说女人有过去处过物件因为这个提出分手这是正常的行为和心态吗

男女都三十多岁了相识处物件,男人说女人有过去处过物件因为这个提出分手这是正常的行为和心态吗?如题那个不叫心态,叫分手理由。。。这种男的就是想把这女的踢一边了。懂吗?就好像一个男的要跟一个女的分手。找了

卫生间、厨房的实用小物件装少了怎么办?装修时该怎样做?

厨房、卫生间是家庭装修的重点部位,大家往往把注意力放在橱柜、吊顶以及电器等大件上了,却忽略了一些小细节,等到实际使用时,就发现了有种种不方便。装修专家教您应该这样做:1、卫生间不可少的事(1)卫生间再

知识大全 我给我以前的物件打电话说我还喜欢她她说啊我说我还想和她搞物件她说啊 谁能告诉我什么意思啊拜托了

我给我以前的物件打电话说我还喜欢她她说啊我说我还想和她搞物件她说啊谁能告诉我什么意思啊拜托了我给我以前的物件打电话说我还喜欢她她说啊我说我还想和她搞物件她说啊我喜欢上一个女孩我象她表白过她说她还小不想

知识大全 有一种女人处过很多物件,和物件都同居过,并且现在随时都还在联络关系还相当之好,她说她爱的是我,但

有一种女人处过很多物件,和物件都同居过,并且现在随时都还在联络关系还相当之好,她说她爱的是我,但你好。如果她不愿放弃她那些异性朋友和联络,那你可以选择离开,也可以选择和她保持联络。不过要和她渐渐疏远。