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

继续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的引用仍然是可读的,不会出现任何的错误。
posted @ 2006-12-20 08:39 Yiling Lai 阅读(3241) 评论(17)  编辑 收藏 所属分类: WPFXAML

  回复  引用    
#1楼 2006-12-20 11:21 | 化外白狐[匿名] [未注册用户]
问个和主题毫不相干的问题 ,windows cardspace如果要和wcf配合使用的话,假如wcf是host到iis上的,似乎启动的时候需要配置aspnet用户需要有读取私钥的权限,但是不知道xp在哪里配置,,能否赐教?
  回复  引用  查看    
#2楼 [楼主]2006-12-20 11:26 | Yiling Lai      
@化外白狐[匿名]

Sorry, 目前的研究领域只在WPF,偶现在无能为力啊!
  回复  引用    
#3楼 2006-12-20 17:43 | 化外白狐[匿名] [未注册用户]
那请教你一个wpf的问题,不知道你有没有看过windows sdk里面的那个计算器的例子,为什么在我的运行环境中编译后的程序老是找不到它那个window1.xaml呢?
  回复  引用  查看    
#4楼 [楼主]2006-12-21 08:27 | Yiling Lai      
@化外白狐[匿名]

你能给出例子在SDK的路径吗?
  回复  引用    
#5楼 2006-12-21 10:53 | 化外白狐[匿名] [未注册用户]
安装了windows sdk后,在sdk帮助文档里面的.NET Framework Development 的Windows Presentation Foundation Samples 的Application Samples 的Calculator Demo
  回复  引用  查看    
#6楼 [楼主]2006-12-21 11:18 | Yiling Lai      
@ 化外白狐[匿名]

我这里没有这个问题,我上传了一份,你下载了试试。

http://www.cnblogs.com/files/yilinglai/WPFCalculator.zip
  回复  引用    
#7楼 2006-12-21 11:29 | 化外白狐[匿名] [未注册用户]
还是一样有问题,莫非你是用vista?我的是xp sp2环境,用vs2005打开编译成功后执行的时候提示找不到window1.xaml的信息
  回复  引用  查看    
#8楼 [楼主]2006-12-21 11:58 | Yiling Lai      
@化外白狐[匿名]

对,我是Vista系统,但是我给你的包有这个文件啊!你自己手动添加进去,再看看有没有必要做改动!:-)
  回复  引用    
#9楼 2006-12-21 12:19 | 化外白狐[匿名] [未注册用户]
我的工程里面也有这个文件阿,我查过很多次了,window1.xaml没有丢,可是不知道为什么就是要报那个错误,我的编译环境自己新建wpf程序能正常,而且后面的例子我测试过几个,比如那个记事本等,都能正常,唯独这个不能正常,实在搞不懂是为什么。
  回复  引用    
#10楼 2006-12-21 12:21 | 化外白狐[匿名] [未注册用户]
我是什么都没有动过,原封不动给打开工程编译的,真挺郁闷。
  回复  引用  查看    
#11楼 [楼主]2006-12-21 12:24 | Yiling Lai      
@化外白狐[匿名]

晚上回家我帮你看看,我家里的也是XP系统!
  回复  引用  查看    
#12楼 [楼主]2006-12-21 19:05 | Yiling Lai      
@@化外白狐[匿名]

我在XP上试过,没有任何的问题!你再仔细检查看看
  回复  引用    
#13楼 2006-12-22 08:30 | 化外白狐[匿名] [未注册用户]
是么,那真的非常奇怪了,你那有邮箱么,我把我现在的工程打个包给您看看。我确实什么也没有动,而且就是这一个工程会报错,难道sdk不一样.....,可是你的包在我的环境下也是这样的问题啊。
  回复  引用  查看    
#14楼 [楼主]2006-12-22 12:22 | Yiling Lai      
@ 化外白狐[匿名]
laiyiling [@] gmail.com
  回复  引用    
#15楼 2007-03-23 17:22 | dansinge [未注册用户]
@ 化外白狐[匿名]
兄弟你强,高手


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-12-29 08:56 编辑过


相关链接: