4

我遇到了一个非常有趣的问题。

假设你在 UWP 应用中有以下 XAML 页面内容:

<ContentControl Content="{x:Bind ApplicationDataLocalityEnum}" />
<ContentControl Content="{x:Bind FontStyleEnum}" />

并且在页面的代码隐藏中包含以下属性:

    public ApplicationDataLocality ApplicationDataLocalityEnum { get; } =
               ApplicationDataLocality.Local;

    public FontStyle FontStyleEnum { get; } = 
               FontStyle.Normal;

预期的结果是,应用程序将显示“本地”和“正常”。

然而实际结果如下:

在此处输入图像描述

这背后的原因是什么?我对此非常好奇,但即使我已经尝试挖掘调试器值很长时间,它也从未发现任何可能导致这种情况的东西。

您可以在 GitHub 上使用我的示例项目

4

1 回答 1

2

如果您查看FontStyle(只需按 F12)的来源,您会发现它位于Windows.Foundation.UniversalApiContract.winmd. 这不是 .NET 程序集,而是投影到 .NET 中的本机程序集。IReference的 MSDN说:

使用 .NET 编程时,此接口是隐藏的,开发人员应使用 Nullable 类。基本 IDL 签名显示 IReference(带有约束)的所有 Windows 运行时成员改为使用可空值类型的可空语法(例如,?bool)公开。

那么为什么它不起作用呢?

答案的核心是,这不是 .NET 类型,其行为也不像 .NET 类型。含义ToString()不是本机实现的,就好像它是一个enum,而是像 一样GetType().ToString(),这解释了您所看到的输出。

他们为什么不让它工作?

为了在平台方面纠正这个问题,类型需要一种机制来区分数字、结构和委托。在结构和委托的情况下,您希望ToString()返回GetType().ToString()而不是名称值;因此,这种通用行为是选项中最常见的选择。

于 2016-09-07T21:52:28.620 回答