XAML 上での XML 名前空間の使用

 
WPF や Silverlight で、自分で作成したクラスやカスタム コントロールを XAML 上に記述すると、
次のようなコードになると思います。
ここでは、CustomControlLibrary1.dll の CustomControlLibrary1 名前空間に
CustomControl1 クラスを作成しているものとします。
 
MainWindow.xaml

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml&quot;
    xmlns:my="clr-namespace:CustomControlLibrary1;assembly=CustomControlLibrary1"
    Title="MainWindow" Height="350" Width="525">
    <Grid>
        <my:CustomControl1/>
    </Grid>
</
Window>


 
Visual Studio や Expression Blend でデザインする場合、
4 行目の名前空間プレフィックスの定義はこれらのツールで自動的に記述されるので、労力は大して問題になりません。
しかし、なるべくなら 2 行目や 3 行目と同様に、CLR 名前空間ではなく URI 形式の XML 名前空間を使用したいものです。
 
そこで、CustomControlLibrary1 プロジェクトの AssemblyInfo.cs に次のような属性を追加します。

[assembly: XmlnsDefinition("http://schemas.saka-pon.net/sample1&quot;, "CustomControlLibrary1")]
[assembly: XmlnsDefinition("http://schemas.saka-pon.net/sample1&quot;, "CustomControlLibrary2")]
[
assembly: XmlnsPrefix("http://schemas.saka-pon.net/sample1&quot;, "s")]

XmlnsDefinitionAttribute により、XML 名前空間と CLR 名前空間を関連付けます。
1 つの XML 名前空間に複数の CLR 名前空間を関連付けることができます。
また、XmlnsPrefixAttribute により、XML 名前空間に既定のプレフィックスを割り当てます。
ここで割り当てたプレフィックスは、
Visual Studio や Expression Blend でデザインするときに自動的に使用されるようになります。
 
最初に示した MainWindow.xaml は次のようになります。

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml&quot;
    xmlns:s="http://schemas.saka-pon.net/sample1&quot;
    Title="MainWindow" Height="350" Width="525">
    <Grid>
        <s:CustomControl1/>
    </Grid>
</
Window>


 
注意点
(1) 現在のアセンブリで定義された XML 名前空間を利用することはできません。
     上の例では MainWindow クラスと CustomControl1 クラスは別々のアセンブリ内に存在していますが、
     もし同一のアセンブリ内に存在する場合は CLR 名前空間を利用しなければなりません。
 
バージョン情報
.NET Framework 4
Silverlight 4
Visual Studio 2010 + Silverlight 4 Tools
Expression Blend 4
 
参照

コメント / トラックバック2件 to “XAML 上での XML 名前空間の使用”

  1. 子要素をレンガのようにタイル状に敷き詰める « Do Design Space Says:

    […] (WPF) FrameworkElement.MeasureOverride メソッド FrameworkElement.ArrangeOverride メソッド XAML 上での XML 名前空間の使用 カテゴリー: クライアント技術. タグ: Silverlight, WPF. コメントする […]

  2. XAML へのシリアライズ (その 1) | Do Design Space Says:

    […] さらに、AssemblyInfo.cs に、次の属性を追加します。 このようにすると、XML 名前空間を定義できます。この定義は必須というわけではありません。 XML 名前空間については、XAML 上での XML 名前空間の使用を参照するとよいでしょう。 […]


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。