19

x:Referenceやなどの拡張機能について話しているのでx:FactoryMethod、まとめてここに表示されます。MSDN、Stackoverflow、およびその他の情報源を含む、オンラインで多くの矛盾する情報を読んでいます。

x:Reference例として説明しますが、実際には他のマークアップ拡張機能についても言及しています。混乱の主な原因は、MSDN からの次の抜粋です。

WPF での XAML 2009 言語サポート

WPF では、XAML 2009 機能を使用できますが、WPF マークアップ コンパイルされていない XAML に対してのみ使用できます。マークアップ コンパイルされた XAML および XAML の BAML 形式は、現在、XAML 2009 言語のキーワードと機能をサポートしていません。ルース XAML を WPF に読み込むための既存の手法にも、CLR 型および型システムに対するセキュリティおよびアクセス制限があり、マークアップ コンパイル済み XAML よりも制限が厳しいことに注意してください。詳細については、「セキュリティ (WPF)」または「WPF セキュリティ戦略 - プラットフォーム セキュリティ」を参照してください。XAML 2009 では、以前の XAML 2006 構造を変更するか、基本的なマークアップ フォームを変更する追加機能も導入されています。

x:参照マークアップ拡張

x:Reference is a construct defined in XAML 2009. WPF では、XAML 2009 の機能を使用できますが、WPF マークアップ コンパイルされていない XAML に対してのみ使用できます。マークアップ コンパイルされた XAML および XAML の BAML 形式は、現在、XAML 2009 言語のキーワードと機能をサポートしていません。

ただし、次の段落は、前の段落 (つまり、についての段落) の直前に表示されますx:Reference

WPF および XAML 2006 では、要素の参照は、ElementName バインディングのフレームワーク レベルの機能によって処理されます。ほとんどの WPF アプリケーションとシナリオでは、ElementName バインディングを引き続き使用する必要があります。この一般的なガイダンスの例外には、データ コンテキストやその他のスコープに関する考慮事項があり、データ バインディングが非現実的であり、マークアップ コンパイルが関与しない場合が含まれる場合があります。

ここに直接の矛盾はありませんが、この段落はx:Referenceアプリケーションで使用できると言っているようです。また、その段落についてx:Referenceは自動的に生成されたようで、古くなっている可能性があります。

次に、本「WPF 4 Unleashed」からの抜粋を次に示します。

x:Reference マークアップ拡張機能は、多くの場合、この記事の執筆時点ではルース XAML からのみ使用できる XAML2009 機能に誤って関連付けられています。x:Reference は WPF 4 の新機能ですが、プロジェクトがバージョン 4 以降の .NET Framework を対象としている限り、XAML2006 から問題なく使用できます。

次の Stackoverflow の質問もありますが、答えが矛盾しているものもあり、明らかに正しいものはありません。

  1. x:Reference の代わりになるものは何ですか?
  2. XAML 2009 - x:Reference - これを使用することの欠点はありますか?
  3. WPF の x:Reference はいつ解決され、XAML 要素の順序が影響するのはなぜですか?

最後に、私はこのx:Reference拡張機能を個人的に使用しましたが、MSDN の説明に関係なく、WPF アプリケーションで機能しているように見えますが、Visual Studio は、マークアップの null 参照例外など、奇妙なこと (または ReSharper の可能性があります) について不平を言うことがあります。

実際の質問に行くと、

  1. WPF アプリケーションで XAML 2009 を (全体または一部) 使用できますか?
  2. これらの特定の拡張機能は、WPF アプリケーションの作成に使用できますか? それらの使用に制限はありますか?
  3. これらすべてに関して、なぜこれほど多くの混乱が生じているのでしょうか?
4

1 に答える 1