2017-09-08 1 views
0

私のVisual Studio 2017 Intellisenseが公開ゲッターでフィールドだけを表示するのはなぜだろうか。この特定のケースでは、パブリックゲッターを使用して静的フィールドをWPFコンテンツにいくつかの静的/定数フィールドをロードしようとしています。なぜWPF XAML Intellisenseはパブリックゲッターを持つフィールドのみを表示しますか?

Intellisense in XAML

あなたは私以下のコードで見ることができるようにAppクラスに3つのさまざまなフィールドを追加しましたが、一つだけ(StaticGetterName)が示されています。面白い事実は、私がスペルミスをしないで入力すると、他の2つのフィールド(StaticField & ConstantName)が円滑に動作しているということです。プロジェクトは、Appクラスの3つのフィールドのいずれかで正常に構築され、実行されます。

私はもうクラスの宣言にstaticキーワードを追加しようとしましたが、これまでの変更はありません。またpartialキーワードは問題ではありません。

バインダーを書くつもりだったらこれでいいですパブリックゲッターでの提案のみを表示することは完璧な意味を持ちます。しかし、それはすべての種類の静的なフィールドになると?多すぎない程度に。

私はXAML Intellisenseの周辺にまだいくつかのバグがありますが、Intellisenseが動作していないシナリオではないことを推測しました。確かにそれは働いています、それはすべての可能性のある自動補完を表示していないようです。

App.xaml.cs

namespace DSIK.ClientApp 
{ 
    using System.Windows; 

    public partial class App : Application 
    { 
     public const string ConstantName = "Client"; 

     public static string StaticField = ConstantName; 

     public static string StaticGetterName => ConstantName; 
    } 
} 

MainWindow.xaml

<Window x:Class="DSIK.ClientApp.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:DSIK.ClientApp" 
     Title="{x:Static local:App.StaticGetterName}" Height="460" Width="570"> 
    <Grid> 

    </Grid> 
</Window> 

答えて

0

XAML型システムとスキーマモデルは、プロパティだけの概念を持っているので、私は、短いです。フィールドの概念はありません。 CLRフィールドをXamlプロパティとして扱うために、既定のスキーマコンテキストが作成されている可能性がありますが、これは決して実行されませんでした。一般的に、非最終フィールドは一般的に.NETで推奨されない理由はないと思います。

Xamlタイプのモデルには、保護レベルの概念もありません。それは、意図的な設計の決定だった可能性があります。 Xamlのマークアップで宣言できるメンバーはすべてpublicでなければなりません。実行時にXaml(またはBaml)が解析されるときに意味があり、Xamlはプロジェクトやアセンブリの領域外に完全に存在することができるため、例えばinternalメンバーを扱う明確で一貫性のない方法はありません。 Xamlからのオブジェクトの構築は、構築されたオブジェクトのインスタンスのコンテキストでは発生しません。言い換えれば、Xamlはのオブジェクトをの外に作成するため、privateまたはprotectedのメンバーをサポートすることはできません。

最後に、定数とフィールドは少し異なります。パブリックフィールドがXamlプロパティにマップされたとしても、Xamlで設定することはできないため、定数をマップする理由はありません。読み取り専用のプロパティ(またはパブリックセッターのないプロパティ)と同じように、読み取り専用フィールドにも同じことが適用されます。

関連する問題