2011年12月9日金曜日

VB の xaml と C# の xaml

※これは VB Advent Calendat 2011 用の投稿です

ネット上で調べ物をしていると C# で書かれている記事に出会う事が多々あると思います。基本的なロジックは、コード変換を行っているサービスを利用するなど C# を知らない人でもどうにかする方法が用意されています。ですがコードだけではなくxaml 上でも C# と VB では違いがあります。

実際に VB、C# 双方で WPF の Window を作成した状態は次のようになります。

vbproj

これが VB のプロジェクト情報です。

csproj

そしてこちらが C# のプロジェクト情報です。実はこの画面上の小さな違いが影響しています。

   1: <Window x:Class="MainWindow"
   2:     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   3:     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   4:     Title="MainWindow" Height="350" Width="525">
   5:     <Grid>
   6:         
   7:     </Grid>
   8: </Window>

こちらが VB での新規 WPF ウィンドウの xaml です。

   1: <Window x:Class="WpfApplication1.MainWindow"
   2:         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   3:         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   4:         Title="MainWindow" Height="350" Width="525">
   5:     <Grid>
   6:         
   7:     </Grid>
   8: </Window>

対して C# では上記のようになります。このように、VB の xaml と C# の xaml では「クラス名が名前空間付きかどうか」という違いがあります。ここに影響する設定が、先ほどのルート名前空間なのか既定の名前空間なのか、という違いです。VB ではルート名前空間として指定しますので省略した記述を行っている形になります。ですので、C# で作成された xaml を VB のプロジェクトに取り込んだ場合、今回の例ですと

WpfApplication1.WpfApplication1.MainWindow

というウィンドウクラスを作成してしまう xaml になってしまいます。VB 使いな方々はネット上で発見したサンプルを利用する際、このあたりも注意すると後で悩まなくていいかと思います。

0 件のコメント:

コメントを投稿