C#面试题更新 2026-08-03

在 WPF 应用程序中,有哪些常见的方法或步骤可用于创建和实现自定义控件?

考察说明

考查对 WPF 控件扩展机制的理解和实际应用能力。

回答思路

  1. 【回答框架 1】WPF 中自定义控件主要有三种方式。第一种是 UserControl,通过组合多个现有控件来构建新控件,适合简单复合场景,开发效率高。第二种是自定义控件(CustomControl),继承自 Control 或更具体的基类,通过模板和样式定义外观,适合功能复杂、需要模板化的控件。第三种是创建 FrameworkElement 派生类,直接参与布局和渲染,用于高度定制的绘制场景。
  2. 【回答框架 2】自定义控件通常需要实现静态构造函数,在其中重写默认样式键,例如 DefaultStyleKeyProperty.OverrideMetadata,以便应用主题样式。在 Generic.xaml 中定义控件模板,通过 TemplateBinding 或绑定关联控件属性与模板元素。代码部分可重写 OnApplyTemplate 获取模板中的命名元素,并处理事件或更新状态。
  3. 【回答框架 3】UserControl 与自定义控件的核心区别在于外观定义方式。UserControl 的 UI 固定,难以被外部重新模板化;自定义控件的外观完全由控件模板决定,样式可替换,适合控件库开发。选择时应评估复用需求、模板化要求和开发维护成本。
  4. 【回答框架 4】自定义控件开发中还需注意依赖属性定义,用于支持数据绑定、样式和动画;只读依赖属性处理内部状态;路由事件用于事件冒泡或隧道。此外,要处理控件默认样式、主题资源引用,以及设计时支持。
  5. 【回答框架 5】完成控件后,应进行充分测试,包括功能、性能(如布局和渲染效率)、以及在不同主题和屏幕分辨率下的表现。
  6. 【关键点 1】WPF 自定义控件主要有 UserControl、CustomControl 和直接继承 FrameworkElement 三种方式。
  7. 【关键点 2】自定义控件通过 DefaultStyleKeyProperty 关联默认样式,并在 Generic.xaml 中定义控件模板。
  8. 【关键点 3】依赖属性和路由事件是自定义控件支持绑定和事件处理的关键机制。
  9. 【关键点 4】CustomControl 支持外部重新模板化,UserControl 则相对固定。
  10. 【关键点 5】控件开发需考虑样式、主题、资源和设计时支持等方面。
  11. 【易错点 1】不要混淆 UserControl 和 CustomControl 的使用场景,UserControl 不能方便地被外部重新模板化。
  12. 【易错点 2】自定义控件中未设置 DefaultStyleKey 会导致无法应用默认样式。
  13. 【易错点 3】在自定义控件中直接使用普通属性而非依赖属性,会丧失绑定、样式和动画支持。