web-dev-qa-db-ja.com

すべてのWPFファイルのxmlnsとは何ですか?

xmlnsとは何ですか?

WPFプロジェクトを作成するときに、XAMLファイルでどのような役割を果たしますか?

44
Embedd_Khurja

xmlnsはXMLであり、必ずしもXAMLではありません。xml要素名を解決する名前空間を定義します。これは修飾子なしで定義されているため、XML要素名を解決するためのデフォルトの名前空間を定義しています。

XAMLでは通常、次のエントリが表示されます。デフォルトの名前空間は基本的にWPFであると定義されているため、すべてのXML要素名はWPF要素として解決されます。

xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"

次のようなデフォルト以外の名前空間もよく見られます。

xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"

これは、XAML固有の要素の修飾された名前空間を定義します。要素または属性の名前をこの名前空間内で解決したい場合は、xで修飾する必要があります。例えば

<StackPanel x:Name="foo" />

この定義には2つの名前解決があります。

  1. StackPanel-これは非修飾名であるため、WPFであるデフォルトの名前空間で解決されます
  2. x:Name-名前はxで修飾され、XAMLドキュメント内で解決されます。
55
JaredPar

また、xmlnsを使用して、XAML内の独自の名前空間への参照も取得します。新しいWPFプロジェクトを作成するときに最初に行うことの1つは、プロジェクトの名前空間への参照を追加することです。

xmlns:local="clr-namespace:MyWpfProject"

これで、プロジェクト内で作成できるクラス(IValueConvertersやDataTemplateSelectorsなど)に "local:"プレフィックスを使用してアクセスできます。

<local:BooleanToColorConverter x:Key="booleanToColorConverter" DefaultBrush="Green" HighlightBrush="Red" />

もちろん、「ローカル」を使用する必要はありません。好きな名前を付けることができます。また、同じ方法で必要な他のネームスペースへの参照を追加できます。

22
Joel Cochran

アセンブリにXmlnsDefinitionAttributeを追加することで、複数のCLR名前空間を1つのXML名前空間にマップすることもできます。これは、次のようにSystem.Windowsで多くの名前空間をマッピングすることにより、WPFチームが行ったものです。

[XmlnsDefinitionAttribute(
    "http://schemas.Microsoft.com/winfx/2006/xaml/presentation", 
    "System.Windows.Controls")]
[XmlnsDefinitionAttribute(
    "http://schemas.Microsoft.com/winfx/2006/xaml/presentation", 
    "System.Windows.Ink")]

この構文はXAMLを簡略化できますが、マージするCLR名前空間に同じ名前のクラスが含まれないように注意してください。

12
Anthony Brien

[〜#〜] msdn [〜#〜] から取得したとおり、ルート要素には属性xmlnsおよびxmlns:xも含まれます。これらの属性は、マークアップが参照する要素の要素定義を含むXML名前空間をXAMLプロセッサに示します。 xmlns属性は、デフォルトのXML名前空間を具体的に示します。

使用とマッピングのスコープを定義するためのxmlnsのこの使用法は、XML 1.0仕様と一致しています。

お役に立てれば。

6