WPF标记扩展的笔记

栏目: ASP.NET · 发布时间: 6年前

命名空间:http://schemas.microsoft.com/winfx/2006/xaml

语法: {}, 左右大括号

从System.Windows.Markup.MarkupExtension继承的类

X:Key, 保证唯一性,类似Dictionary的key, 一般用在ResourceDictionary里, 即用x:key定义ResourceDictionary的子项

X:Name,保证唯一性, 可以通过RuntimeNamePropertyAttribute把某个类型的Property映射到x:Name上。 典型的例子就是FrameworkElement的Name属性就是通过RuntimeNamePropertyAttribute映射到x:Name上的。

X:Type, 等于C#中的typeof()

X:Static, 用来引用Enum、Static、Const等变量

X:Null, 等于C#中的Nullable属性的值设置为null。

X:Array,用于构造数组, Type属性指定Array里的Template是什么类型

StaticResource用于xaml加载时使用ResourceDictionary中x:Key定义的资源,必须先定义再使用,不然会抛出异常。类似:“在“System.Windows.StaticResourceExtension”上提供值时引发了异常。”,行号为“7”,行位置为“14”。

无法找到名为“xxx”的资源。资源名称区分大小写。

DynamicResource同样是使用ResourceDictionary中x:key定义的资源,只不是系统编译时先用表达式占位符占位延迟加载,等真正使用时才会用实际值替换占位符。另外,DynamicResource支持嵌套引用追溯。FindResource方法的逻辑和它一样。但使用DynamicResource需要满足3者中的一个:

1.FrameworkElement或FrameworkContentElement上的DependencyProperty

2.Style中的Setter

3.FrameworkElement或者FrameworkContentElement类上的Freezable的Property,或者Setter值

所谓向前引用的意思就是说引用时尚未定义。

TemplateBinding类似{Binding RelativeSource={RelativeSource TemplatedParent}}, 或者{Binding RelativeSource={x:Static RelativeSource.TemplatedParent}} ,

ComponentResourceKey用在2个地方。1.公共资源供其他模块使用。2.重新模版化控件时,用到以前模版的的值。注意的是:a.必须是DynamicResource。b.ResourceId定义的key必须在程序集的Themes文件夹下的Generic.xaml里。c.TypeInTargetAssembly指定的类型只是为了确定是哪个程序集,并没有实际意义,类中可以不写任何逻辑。

Windows有5种主题:Aero,Classic,Luna,Royale, 以及Generic默认主题。 默认的wpf控件的theme 在C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\下,有PresentationFramework.Aero.dll、PresentationFramework.Classic.dll等 这些dll定义了控件的默认style。当系统没有在主题对应的xaml中找到定义时, 会去generic.xaml里查找。另外,程序集的AssemblyInfo.cs中的ThemeInfo用来指定Theme和Generic主题的来源位置。

ThemeDictionary,当控件被创建时,它的系统主题要么在它关联的xxx.Aero.dll\xxx.Classic.dll等AssemblyName.ThemeName.dll命名的dll中,要么在本身程序集AssemblyName.dll中。 如果我们需要更改这些已创建控件的系统默认主题行为,就需要新创建dll并包含你想要的Themes/ThemeName.xaml,这个dll就是重定义控件的主题行为。而要使用这个新dll,就要用到ThemeDictionary。

举个例子:比如Button在Aero主题的外观定义在FrameworkElement.Aero.dll中,现在需要重定义Button在Aero下的默认外观, 我们创建一个CustomButtonTheme.dll, 在这个dll的根节点创建Themes文件夹,然后在文件夹中创建Aero.NormalColor.xaml。继续在xaml中重新Button的Style。

我们的工程使用时,只需在ResourceDictionary.MergedDictionaries中添加<ResourceDictionarySource="{ThemeDictionary AssemblyName=CustomButtonTheme}"></ResourceDictionary>


以上所述就是小编给大家介绍的《WPF标记扩展的笔记》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Ajax模式与最佳实践

Ajax模式与最佳实践

Christian Gross / 李锟、张祖良、蔡毅、赵泽欣 / 电子工业出版社 / 2007-3 / 49.80元

Ajax 正在将我们带入到下一代的网络应用中。 本书深入探讨了动态的网络应用,将Ajax和REST集成在一起作为单独的解决方案。一个很大的优势是,与Ajax相似,REST可以和现今存在的技术一起使用。现在上百万的客户端计算机都是基于Ajax的,上百万的服务器是基于REST的。   无论你是否已经开发过Ajax应用程序,这都是一本理想的书。因为这本书描述了各种各样的模式和最好的实践经验。通过此......一起来看看 《Ajax模式与最佳实践》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具