命名空间: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标记扩展的笔记》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- YAML,另一种标记语言?不止是标记语言
- html5 – 用于span标记的Twitter Bootstrap工具提示(不适用于标记)
- 开发 地图标记工具 后记
- IOS自动进行View标记
- xml – 在标记中嵌入XSL代码
- Pandoc 2.0.4 发布,标记格式转换工具
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。