0

サードパーティ プロジェクトのアセンブリが XAML でどのように参照されているのか疑問に思っていました。

時々私は見る

xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"

そして時々私は見る

xmlns:tn="clr-namespace:WPFTaskbarNotifier;assembly=WPFTaskbarNotifier"

URLスタイルとスタイルの違いclr-namespaceと、それぞれが使用されるタイミングは何ですか?

4

2 に答える 2

5

XAML ローダーは、XAML ツリー内の要素によってどのアセンブリが参照されているかを認識している必要があります。XML 名前空間を使用してこの値を見つけます。

clr-namespaceスタイル名前空間は、XAML ローダーがアセンブリを見つけて、その中で定義された型を読み込めるように特別にフォーマットされています。この名前空間形式を使用して、任意のアセンブリを参照できます。同じアセンブリ内で型を参照する場合は、この形式を使用する必要があります。

スタイルは、URL従来の XML 名前空間スタイルです。URL は、XSD スキーマなどの名前空間に関する情報を取得できる場所を指しているはずですが、多くの場合、単に 404 になっています。XmlnsDefinitionAttributeを使用して定義することにより、アセンブリ内の型を参照する呼び出し元がこのスタイルの名前空間を使用できるようにすることができます。

AssemblyInfo.cs ファイル内に名前空間セグメントごとに 1 つドロップするだけです。

[assembly: XmlnsDefinition("http://www.Herp.com/2012/", "Herp")]
[assembly: XmlnsDefinition("http://www.Herp.com/2012/", "Herp.Derp")]
于 2012-11-13T19:42:05.747 に答える
2

両者に違いはありません。どちらも同じアセンブリを指しています。

WPF では、開発者XmlnsDefinitionは、アセンブリ レベルで属性を使用してカスタム名前空間を登録できます。これらの名前空間は、コンパイルされたアセンブリを参照する他のプロジェクトで使用できるようになります。この属性を使用して、複数の CLR 名前空間をマージすることもできます (WPF 自体がこれを行います)。これにより、結果の XAML を簡素化し、XAML デザイナーから内部プロジェクト構造を隠すことができます。

しかし、見た目の違いを超えて、2 つの名前空間文字列は同じことを意味し、同じ意味で使用できます。ここでの唯一の制限は、それらを定義するアセンブリ内でこれらのカスタム名前空間を使用できないことです。これらは最終的なアセンブリに追加されるメタデータの一部であり、それ以前はコンパイラで使用できません。

于 2012-11-13T19:38:01.663 に答える