MAUI 中 TemplatedView 是分离逻辑与样式的可复用模板控件,通过继承、定义绑定属性、重写 OnApplyTemplate 并配合 ControlTemplate 实现定制化 UI,支持主题切换与动态模板替换。
MAUI 中的 TemplatedView 是创建可复用、样式可定制的模板化控件的核心方式,它不自带 UI,而是通过 ControlTemplate 定义外观,再由子类(如自定义控件)绑定数据并渲染。关键在于“分离逻辑与样式”,适合封装带交互的组件(如卡片、开关、状态指示器等)。
新建一个类继承 TemplatedView,声明可绑定的属性(如标题、图标、是否启用),并在构造函数中设置默认模板:
BindableProperty(例如 TitleProperty、IsEnabledProperty)OnApplyTemplate() 方法,在其中获取模板内命名元素(如 GetTemplateChild("TitleLabel"))并绑定逻辑或事件模板通常写在资源字典(Resources)里,用 ControlTemplate 包裹布局,并通过 TemplateBinding 绑定到 TemplatedView 的属性:
Grid、StackLayout){TemplateBinding Title} 将子控件(如 Label)的 Text 属性关联到 TemplatedView 的 Title 属性VisualStateManager 响应状态变化(如 Disabled、Pressed)先在 XAML 中声明命名空间,再像普通控件一样使用:

xmlns:local="clr-namespace:YourApp.Controls"
ControlTemplate,或通过 Style 统一设置TemplatedView 天然适配 MAUI 的主题机制:
App.xaml 的 ResourceDictionary.MergedDictionaries 中分别定义 Light 和 Dark 模板资源OnIdiom 或 OnPlatform 实现平台/设备差异模板this.ControlTemplate = newTemplate; 切换模板(注意触发 OnApplyTemplate)基本上就这些。TemplatedView 不复杂但容易忽略 OnApplyTemplate 的调用时机和 TemplateBinding 的作用域限制——它只认 TemplatedView 及其父类的属性,不能跨级绑定。