等同于 UWP 中的 x:Type

Equivalent of x:Type in UWP

我有这个class:

public class EditorKey
{
    public Type TargetType { get; set; }
    public DataTemplate Template { get; set; }
}

现在,我想在 XAML 中创建此 class 的一个实例。由于在 UWP 中我们没有 x:Type 标记扩展,我直接将类型指定为字符串,并使用 TargetType="model:Customer"

的正确前缀
<Page
    x:Class="App8.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:model="using:App8"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <ContentControl>
        <model:EditorKey TargetType="model:Customer" />
    </ContentControl>

</Page>

运行 这个,我得到一个运行时异常:

无法从文本 'model:Customer' 创建 'App8.EditorKey'。

如何将字符串映射到实际类型?

在 UWP 中执行此操作的常用方法是简单地将引用作为字符串提供:

<model:EditorKey TargetType="model:Customer" />

如果这不起作用,请尝试指定完整的命名空间,而不是定义 xmlns.

示例:

<model:EditorKey TargetType="App8.Customer" />

注意:截至撰写本文时,存在上述内容在发布模式下会崩溃的问题。作为解决方法,您可以创建标记扩展:

[MarkupExtensionReturnType(ReturnType = typeof(Type))]
public sealed class TypeExtension : MarkupExtension
{
    public Type Type { get; set; }

    /// <inheritdoc/>
    protected override object ProvideValue() => Type;
}

并像这样使用它:

<model:EditorKey TargetType="{local:Type Type=model:Customer"/>