用途:开发 WPF CustomControl,实现外观可定制、支持多主题、与内置控件同等扩展性的控件。
主要能力与用法:
- 继承选择:需 ControlTemplate 定制或主题支持时继承 Control;仅快速开发且不需模板定制时用 UserControl。
- 定义控件契约:在类上声明 TemplatePart 与 TemplateVisualState 特性,并把 Part/State 名称定义为 const 字符串。
- Part 属性模式:将模板元素包装为私有属性,在 setter 中订阅/取消订阅事件。
- OnApplyTemplate:用 GetTemplateChild 配合 as 转换获取部件,类型不符或缺失时为 null,控件须容忍不完整模板;随后调用 UpdateStates(useTransitions: false) 设初态。
- UpdateStates 集中状态切换:用 VisualStateManager.GoToState 处理各状态组;在 OnApplyTemplate(无过渡)、属性变更回调、OnGotFocus/OnLostFocus(有过渡)时调用。
- 属性变更回调中触发状态更新与自定义事件。
- ControlTemplate 写在 Themes/Generic.xaml:VisualStateGroups 放在模板根元素,Part 用 x:Name 对应 PART_ 名称。
检查清单:继承 Control;在 AssemblyInfo.cs 添加 ThemeInfo;声明 Parts 与 States;Part 名用 const;setter 中订阅/取消订阅;OnApplyTemplate 允许 null;集中状态逻辑;VisualStateGroups 置于模板根;默认样式放 Themes/Generic.xaml;静态构造函数调用 DefaultStyleKeyProperty.OverrideMetadata。
限制:资料未提供依赖库版本、安装命令、收费或平台信息,暂未提供。