如何在自定义控件上使用TemplatePart属性?

时间:2018-10-11 15:06:31

标签: uwp winrt-xaml midl c++-winrt

我开始使用新的C ++ / WinRT语言投影来开发UWP XAML自定义控件。我的基本结构正确,但是在定义TemplatePartAttribute属性时遇到了麻烦。在C#甚至C ++ / CX中,这非常简单,因为该语言对此具有直接支持。

现在在C ++ / WinRT中,我假设我必须在MIDL源中的runtimeclass上定义属性,但是我不知道如何正确处理。例如:

[Windows.UI.Xaml.TemplatePart(L"PART_Button", ???)]
runtimeclass CustomControl : Windows.UI.Xaml.Controls.Control
{
    CustomControl();

    /* … */
}

虽然Name的{​​{1}}属性很容易设置,因为它是TemplatePartAttribute,但我该如何设置String属性-三个? -(在Windows运行时中为Type)?在正式的C ++ / WinRT文档和MIDL 3.0文档中,我都没有找到关于此的任何文档。

编辑(WORKAROUND)
似乎不需要TypeName属性来使用代码中的模板部分(使用TemplatePart方法),无论如何我都可以引用元素GetTemplateChild()

2 个答案:

答案 0 :(得分:0)

您只需指定第二个参数的类型名称即可。

runtimeclass Button : Windows.UI.Xaml.Controls.Button
{
  /* ... */
}

[Windows.UI.Xaml.TemplatePart("PART_Button", Button)]
runtimeclass Control : Windows.UI.XAML.Controls.Control
{
  /* ... */
}

类似的东西应该起作用。

答案 1 :(得分:0)

C#[TemplatePart(Name = "PART_Button", Type = typeof(Button))]

XAML <Button x:Name="PART_Button"></Button>