Visual Studio添加XAML自定义用户控件未自动生成idl文件相关问题咨询
C++/WinRT XAML自定义用户控件配置指南
1 是否需要手动添加IDL文件
需要。C++/WinRT所有XAML运行时类都必须通过MIDL3格式的.idl文件定义类继承关系、公开成员,代码生成工具依赖IDL文件生成对应的投影代码、类型映射文件。
如果Visual Studio添加控件时没有自动生成IDL,是因为你选择的模板不带C++/WinRT支持,你可以手动添加「Midl 文件(.idl)」到项目,也可以勾选模板中的IDL生成选项,对应选项见下图:
2 IDL与XAML的依赖关系绑定
不需要手动配置依赖,只要满足两个条件,VS的MSBuild规则会自动处理两者的生成顺序和关联:
- IDL文件的根文件名和XAML、对应.h/.cpp文件完全一致,例如控件名为
TestUserControl,则四个文件名为TestUserControl.idl、TestUserControl.xaml、TestUserControl.h、TestUserControl.cpp - IDL中定义的运行时类必须明确继承自
Windows.UI.Xaml.Controls.UserControl,IDL示例代码如下:
namespace 你的项目命名空间 { [default_interface] runtimeclass TestUserControl : Windows.UI.Xaml.Controls.UserControl { TestUserControl(); // 此处声明你要公开的依赖属性、方法、事件 } }
3 UserControl开发完整操作步骤
你之前参考的自定义控件开发逻辑和UserControl完全通用,仅基类声明不同,完整操作步骤如下:
- 新建IDL文件,按上述要求定义运行时类,保存后右键点击IDL文件选择「编译」,会在项目的
Generated Files目录下自动生成对应的投影头文件 - 新建XAML文件,根元素声明和你定义的类匹配,XAML示例:
<UserControl x:Class="你的项目命名空间.TestUserControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <!-- 此处编写控件布局 --> </UserControl>
- 编写.h和.cpp实现代码,头文件中引入IDL生成的投影头,构造函数中调用
InitializeComponent(),实现所有在IDL中声明的成员 - 全量生成项目,确认没有报错后即可在其他XAML页面中引用该用户控件
内容的提问来源于stack exchange,提问作者rsp
相关产品推荐
相关产品推荐

