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;

期待される結果は、アプリが「Local」と「Normal」を表示することです。

ただし、実際の結果は次のとおりです。

ここに画像の説明を入力

この背後にある理由は何ですか? 私はそれについて非常に興味がありますが、デバッガーの値を長い間掘り下げてみましたが、これを引き起こす可能性のあるものは何も明らかになりませんでした.

GitHubで私のサンプル プロジェクトを試してみてください。

4

1 に答える 1

2

FontStyle(F12 を押すだけで)のソースを調べると、 Windows.Foundation.UniversalApiContract.winmd. これは .NET アセンブリではなく、.NET に投影されたネイティブ アセンブリです。IReferenceの MSDN は次のように述べています。

.NET でプログラミングする場合、このインターフェイスは非表示になるため、開発者は Nullable クラスを使用する必要があります。基本的な IDL シグネチャが (制約付きで) IReference を示すすべての Windows ランタイム メンバーは、代わりに、null 許容値型の null 許容構文 (たとえば、?bool) を使用して公開されます。

では、なぜうまくいかないのでしょうか。

答えの核心は、これは .NET 型ではなく、.NET 型のように動作しないということです。意味ToString()は のようにネイティブに実装されていませんが、enum代わりに のようGetType().ToString()に動作し、表示されている出力を説明しています。

なぜ彼らはそれを機能させないのですか?

プラットフォーム側でこれを修正するには、型には、数値、構造体、およびデリゲートを区別するメカニズムが必要です。構造体とデリゲートの場合、名前の値ではなく、値ToString()を返すことが期待されます。GetType().ToString()したがって、この一般的な動作は、オプション全体で最も一般的な選択です。

于 2016-09-07T21:52:28.620 に答える