WPF标记扩展的笔记

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

命名空间: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标记扩展的笔记》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

马化腾自述-我的互联网思维

马化腾自述-我的互联网思维

赵黎 / 石油工业出版社 / 2014-8-1 / 35

马化腾自述:我的互联网思维》讲述了些人说移动互联网就是加了“移动”两个字,互联网十几年了,移动互联网应该是个延伸。我的感受是,移动互联网远远不只是一个延伸,甚至是一个颠覆。互联网是一个开放交融、瞬息万变的大生态,企业作为互联网生态里面的物种,需要像自然界的生物一样,各个方面都具有与生态系统汇接、和谐、共生的特性。开放和分享并不是一个宣传口号,也不是一个简单的概念。开放很多时候被看作一种姿态,但是我......一起来看看 《马化腾自述-我的互联网思维》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具