我遇到了一个非常有趣的问题。
假设您在UWP应用中拥有以下XAML页面内容:
<ContentControl Content="{x:Bind ApplicationDataLocalityEnum}" />
<ContentControl Content="{x:Bind FontStyleEnum}" />
在页面的代码隐藏中包含以下属性:
public ApplicationDataLocality ApplicationDataLocalityEnum { get; } =
ApplicationDataLocality.Local;
public FontStyle FontStyleEnum { get; } =
FontStyle.Normal;
预期的结果是,应用会显示&#34;本地&#34; &#34;正常&#34;。
实际结果如下:
这背后的原因是什么?我对此非常好奇,但即使我已经尝试了很长一段时间深入研究调试器值,它也从未透露任何可能导致这种情况发生的事情。
您可以使用我的sample project on GitHub。
答案 0 :(得分: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()
而不是名称值;所以这种通用行为是各种选择中最常见的选择。