【发布时间】:2021-09-09 23:30:36
【问题描述】:
我为用 C++/WinRT 编写的自定义 XAML 控件编写的 IDL 中必须包含哪些属性/函数/任何内容?
示例
当我在 Visual Studio 中创建自定义 C++/WinRT XAML 控件时,它会创建 4 个文件:
- MyControl.xaml
- MyControl.idl
- MyControl.h
- MyControl.cpp
IDL 文件是基本文件,包含一个简单的属性:
namespace MyNamespace
{
[default_interface]
runtimeclass MyControl : Windows.UI.Xaml.Controls.UserControl
{
MyControl();
Int32 MyProperty;
}
}
有趣的是,.h 文件除了这个属性之外还包含另一个函数:
#pragma once
#include "winrt/Windows.UI.Xaml.h"
#include "winrt/Windows.UI.Xaml.Markup.h"
#include "winrt/Windows.UI.Xaml.Interop.h"
#include "winrt/Windows.UI.Xaml.Controls.Primitives.h"
#include "MyControl.g.h"
namespace winrt::MyNamespace::implementation
{
struct MyControl : MyControlT<MyControl>
{
MyControl();
int32_t MyProperty();
void MyProperty(int32_t value);
void ClickHandler(Windows::Foundation::IInspectable const& sender, Windows::UI::Xaml::RoutedEventArgs const& args);
};
}
namespace winrt::MyNamespace::factory_implementation
{
struct MyControl : MyControlT<MyControl, implementation::MyControl>
{
};
}
.xaml 绑定到哪个没有问题:
<!-- ... -->
<Button x:Name="Button" Click="ClickHandler">Click Me</Button>
<!-- ... -->
问题
我不清楚何时需要在 IDL 上引入函数或属性以便在 XAML 中使用它。
所有属性都需要添加到 IDL 吗?只是依赖属性?函数是否必须出现在 IDL 中?
为什么 MyProperty 出现在 IDL 中,而不出现 ClickHandler?
谢谢!
【问题讨论】:
-
@Anonymous 不,但它最终链接到Consuming objects from XAML markup,它有完整的答案。我在下面总结了一下。谢谢!
标签: xaml winrt-xaml c++-winrt