gpt4 book ai didi

c# - UWP - 绑定(bind)枚举差异

转载 作者:行者123 更新时间:2023-11-30 12:22:47 25 4
gpt4 key购买 nike

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

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

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

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

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

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

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

实际结果如下:

enter image description here

这背后的原因是什么?我对此很好奇,但尽管我已经尝试深入研究调试器值很长时间了,但它从未揭示任何可能导致这种情况的原因。

你可以玩我的sample project on GitHub .

最佳答案

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

When programming with .NET, this interface is hidden and developers should use the Nullable class. All Windows Runtime members where the basic IDL signature shows IReference (with a constraint) are instead exposed using the nullable syntax of the nullable value type (for example, ?bool).

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

答案的核心是,这不是 .NET 类型,而且行为也不像 .NET 类型。这意味着 ToString() 并不是像 enum 那样在本地实现的,而是像 GetType().ToString() 一样运行的,这解释了你看到的输出。

他们为什么不让它发挥作用?

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

关于c# - UWP - 绑定(bind)枚举差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39299427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com