我遇到了一个非常有趣的问题。
假设 UWP 应用中有以下 XAML 页面内容:
<ContentControl Content="{x:Bind ApplicationDataLocalityEnum}" />
<ContentControl Content="{x:Bind FontStyleEnum}" />
并且在页面的代码隐藏中包含以下属性:
public ApplicationDataLocality ApplicationDataLocalityEnum { get; } =
ApplicationDataLocality.Local;
public FontStyle FontStyleEnum { get; } =
FontStyle.Normal;
Expected结果是,应用程序将显示“本地”和“正常”。
Actual但结果如下:
这背后的原因是什么?我对此很好奇,但尽管我已经尝试深入研究调试器值很长时间,但它从未揭示任何可能导致此问题的内容。
你可以玩我的GitHub 上的示例项目 https://github.com/MartinZikmund/Stack-Overflow-2016/tree/master/EnumDisplayQuestion.
你应该调查一下来源吗FontStyle
(只需按F12)你会发现它在Windows.Foundation.UniversalApiContract.winmd
。这不是 .NET 程序集,而是投影到 .NET 中的本机程序集。 MSDN 的参考资料 https://msdn.microsoft.com/en-us/library/windows/apps/br225864.aspx says:
使用 .NET 编程时,此接口是隐藏的,开发人员应使用 Nullable 类。基本 IDL 签名显示 IReference(带有约束)的所有 Windows 运行时成员都改为使用可为空值类型的可为空语法(例如?bool)公开。
那么为什么它不起作用呢?
答案的核心是,这不是 .NET 类型,并且其行为也不像 .NET 类型。意义ToString()
并不是像它一样本地实现的enum
但行为却像GetType().ToString()
,这解释了您所看到的输出。
他们为什么不让它发挥作用呢?
为了在平台端纠正这个问题,类型需要一种机制来区分计数、结构和委托。对于结构和代表,您会期望ToString()
回来GetType().ToString()
而不是名称值;因此,这种通用行为是所有选项中最常见的选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)