XAML の名前空間の謎が解けた
via http://social.msdn.microsoft.com/Forums/ja-JP/wpfja/thread/a0ed39c6-22c7-4ab3-8ac0-af775d02c91c/
XAML で使う XML 名前空間 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" ってどういうカラクリなんだろうと不思議だったけど、XmlnsDefinitionAttribute クラスを使って XML 名前空間に CLR 名前空間を結びつけることができるんだそうな。なるほどー。
AssemblyInfo.cs あたりに
[assembly: System.Windows.Markup.XmlnsDefinition( "http://siokoshou", "Hoge.Fuga" )]
と書く。
そして、XAML で xmlns:snp="http://siokoshou" とすると snp:Puyo のように参照できると。
使い方はこちらが詳しいです。
http://blogs.wankuma.com/kzt/archive/2009/01/09/166020.aspx
ちなみに試してみたら、
- OK ……
- NG ……
この2つはまったく同じことだと思ってたのに、違うんだねぇ。バグなのかわざとなのか微妙だけどw
WPF のアセンブリには
[assembly: System.Windows.Markup.XmlnsDefinition( "http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows" )]
のようなのがズラズラ並んでると思われ。そうやってたくさんのクラスが一つの XML 名前空間で見えるようになってるんですね。
というわけで
[assembly: System.Windows.Markup.XmlnsDefinition( "http://schemas.microsoft.com/winfx/2006/xaml/presentation", "Hoge.Fuga" )]
と書いておけばまるっとOKというお話でした。うそです、マネしちゃだめです、きっと後で苦しみます。