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

查看所有标签

猜你喜欢:

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

Introduction to Linear Optimization

Introduction to Linear Optimization

Dimitris Bertsimas、John N. Tsitsiklis / Athena Scientific / 1997-02-01 / USD 89.00

"The true merit of this book, however, lies in its pedagogical qualities which are so impressive..." "Throughout the book, the authors make serious efforts to give geometric and intuitive explanations......一起来看看 《Introduction to Linear Optimization》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

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

在线XML、JSON转换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具