Templates for uncommon controls
http://msdn.microsoft.com/en-
是该文章的读书摘记
以前的控件其外观代码和逻辑代码是帮定在一起的,
Element 和Control的区别
在WPF中Control类从FrameworkElement
首先Control增加了很多属性,例如Foreground, Background 以及五个与Font有关的属性
其次Control增加了IsTabStop和TabIndex
再者,Control有template, 可以被替换template而改变外观,template基本上
所以如果你要创建自己的Control,
要为你的Control DLL提供一个可被替换的默认的Template, 你必须遵守WPF的严格的规则:
1. 你的源代码项目下必须有一个Theme目录,包含一个叫Gene
2. General.xaml是一个Style的ResourceD
3. Style中必须包含设置Template属性的Section
<RecourceDictonary>
<Style TargetType="cc:CaladendarDay">
<Setter Property="Template">
</Setter>
</Style>
</ResourceDictonary>
4. 在你的控件类的静态构造函数中改变DefaultStyleKe
一般来说你设计一个控件,会从Control派生,
如果你需要属性已经在其他类里面定义过了,不要重新定义它,需要
使用DependencyProperty.
覆盖OnApplyTemplate函数,以便检验Templ
在template中使用TemplateBinding绑定到
在Template中应该尽量少的使用硬编码来设置一些属性的值
如果你的代码会假定Template 中必须有某些类型的部件,那么最好用TemplatePart属
[TemplatePart(Name="PART_
public class CalandarDay: Control
{ ....
}
你的Control派生类最好也可以暴露出一些RoutedCo
public static readonly RoutedCommand NextMonthCoommand = new RoutedCommand("NextMonth", typeof(CalendarMonth));
其实只有少数WPF控件可以绑定到RoutedCommand, ButtonBase, MenuItem, HyperLink等。