继续XAML的话题,在前一个Post当中简单介绍了XAML的类型转换器(TypeConverters)。这次介绍一些XAML标记兼容性(Markup Compatibility)的相关内容。

利用XAML标记兼容性实现更加强大的注释功能

写过XAML的朋友应该都知道:在XAML中可以通过<!--****-->标记来实现注释。但是,利用XAML标记兼容性,还提供了其它更加强大的注释功能。
<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:mc=http://schemas.openxmlformats.org/markup-compatibility/2006
    xmlns:c="Comment"
    mc:Ignorable="c">
   <Canvas>
    <Button c:Width="100" Height="50">Hello</Button>
   </Canvas>
</Window>

看见了Width前面的c前缀吗?它的作用就是注释掉Width属性。是不是感觉比标记注释的方法简单。而且这个c前面不但可以应用在属性上,也可以直接应用在实例上,如下:

<Window
    xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation
    xmlns:mc=http://schemas.openxmlformats.org/markup-compatibility/2006
    xmlns:c="Comment"
    mc:Ignorable="c">
 <Canvas>
    <c:Button Width="100" Height="50">Hello</c:Button>
 </Canvas>
</Window>

上面的代码就全部注释掉了Button实例。当然,这种方法不建议在最后的发布XAML文档中出现。只适合在XAML文档的开发过程中使用。

XAML标记的向后兼容性

XAML支持XAML文档的向前和向后兼容性。为了帮助说明XAML标记的向后兼容性,我们看一个自定义的View类,其中定义了一个Color类型的颜色属性Color_Prop。

public class CLYLView
{
        Color _color;        
       public Color Color_Prop { get { return _color; } set { _color = value; } }
}

很简单,在XAML中,我们可以如下使用这个CLYLView类:

<CLYLView Color=”Red” xmlns=”… assembly-V1-uri…”>

注意其中的xmlns=”… assembly-V1-uri…”,这就是一个所谓的XmlnsCompatibleWith属性。通过它我们指定了包含CLYLView的特定Assembly。

现在,我们向V2版本的CLYLView添加了一个Content属性。如下所示:

public class CLYLView
{
        Color _color;
       Content _content;
       public Color Color_Prop { get { return _color; } set { _color = value; } }
       public Content Content_Prop { get { return _content; } set { _content = value; } }

}

现在我们可以这样使用V2版本的CLYLView实例:

<CLYLView Color=”Red” Content=”Unknown” xmlns=”... assembly-v2-uri…”/>

但是,我们仍然希望在V2版本的CLYLView支持V1版本。满足这种需求,我们可以用XmlnsCompatableWith声明一个新的Assembly与老的Assembly兼容。XAML加载器看到了XmlnsCompatableWith属性,就会把默认地把所有对V1的引用处理为V2的引用。

向后兼容最大的一个好处就是:当我们只有新版的Assembly时,所有对老版Assembly的引用仍然是可读的,不会出现任何的错误。

闲话WPF之六(XAML的标记兼容性(Markup Compaibility))相关推荐

  1. 闲话WPF之七(XAML的向前兼容性)

    前一个Post当中,我们简单介绍了XAML的向后兼容性,以及利用标记兼容性实现注释的功能.现在,我们接着讨论XAML的向前兼容性问题. 同样地,我们用一个简单的例子来帮助说明XAML的向前兼容性.假设 ...

  2. wpf中xaml的类型转换器与标记扩展

    wpf中xaml的类型转换器与标记扩展 原文:wpf中xaml的类型转换器与标记扩展 这篇来讲wpf控件属性的类型转换器 类型转换器 类型转换器在asp.net控件中已经有使用过了,由于wpf的界面是 ...

  3. WPF第一章(XAML前台标记语言(Chapter02代码讲解))

    XAML前台标记语言(Chapter2代码讲解)     很不好意思,工作有点忙,博客停了两天.相对于一门语言的学习,理论知识和实践必不可少,大多数时间我们要用,对于代码也是,一边不行可以看两遍,实在 ...

  4. 第一章:初识WPF,XAML,WPF控件

    前言 总目录 本章主要介绍WPF与XAML,以及WPF的控件的基本使用,让大家先初步认识WPF. 关于WPF的官方资料:官方WPF文档1 .官方WPF文档2.官方WPF文档3.官方WPF文档4 一.W ...

  5. 闲话WPF之十(Dependency属性 [2] )

    在前一个Post中,曾提到将要重点研究Dependency属性的三个方面:变化通知:属性值的继承:支持多个提供对象.下面,我将分别就这三个内容进行简单地说明. [变化通知] 在任何时候,只要Depen ...

  6. QDoc标记命令Markup Commands

    QDoc标记命令Markup Commands 标记命令Markup Commands 标记命令Markup Commands 标记命令指示生成的文档的外观和逻辑结构. \a \annotatedli ...

  7. 闲话WPF之五(XAML中的类型转换)

    在前面关于XAML的Post当中,简单说明了XAML如果引入自定义名称空间.还提到过XAML基本上也是一种对象初始化语言.XAML编译器根据XAML创建对象然后设置对象的值.比如: <Butto ...

  8. [No0000130]WPF 4.5使用标记扩展订阅事件

    自从我上次写到关于标记扩展的时候已经有一段时间了...... Visual Studio 11 Developer Preview的发布给WPF带来了一些新功能,让我有理由再次使用它们.我要在这里讨论 ...

  9. WPF之XAML语法

    目录 树形结构 对象属性赋值语法 使用标签的Attribute 使用属性元素 扩展:标记扩展(Markup Extensions) 扩展:使用TypeConverter 类映射Atribute与Pro ...

最新文章

  1. HTML5+MUI+HBuilder 之初探情人
  2. linux线程函数大全
  3. sql语句中 时间数值转换为时间格式函数
  4. 【图像分类】如何使用 mmclassification 训练自己的分类模型
  5. fieldset ----- 不常用的HTML标签
  6. C#调用VC DLL 复杂结构 解决方法
  7. _tcstoul() 使用
  8. 【制作】基于金沙滩51单片机的贪吃蛇程序
  9. 微信如何创建自己的小程序?
  10. navicat的使用技巧
  11. 内网渗透-WindowsLinux痕迹清除
  12. 政务终端安全管理的三个视角
  13. Python 3 字符串 rsplit( ) 方法
  14. ORACLE错误一览表(转)
  15. 【fpga里Verilog语言的小知识点】
  16. Electron 桌面应用问题解决方法
  17. nbu备份本机oracle,使用NetBackup进行oracle备份和恢复
  18. C#项目绩效考核实战提升(一)
  19. Nuxt之Meta标签关键字描述之description重复问题
  20. 主要电商模式 B2B C2C B2C C2B O2O F2C B2B2C

热门文章

  1. 如何在ReactJS中使用FastReport Core Web Report
  2. 《战争论》第四篇《战斗》的主要内容
  3. 【iOS-Cocos2d游戏开发之二十一 】自定义精灵类并为你的精灵设置攻击帧以及动画创建!【二】...
  4. dagger2 android快速注入框架相关学习资料
  5. ABP理论学习之Abp Session
  6. ORACLE学习之绑定变量
  7. css取消聚焦边框[Chrome,Safari]
  8. 通过 Python 装饰器实现DRY(不重复代码)原
  9. awk '/#BEGIN/,/#END/{next}1' 1是什么意思?-转
  10. 完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三2-转