【WPF】Stringやintなどのシステム型をXamlで直接生成する。

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:sys="clr-namespace:System;assembly=mscorlib"
   x:Class="hogehoge"
    Title="test" Width="100" Height="100">
 
  <ListBox Margin="10">
    <ListBox.ItemsSource>
      <x:Array Type ="{x:Type sys:String}">
        <sys:String>foo</sys:String>
        <sys:String>bar</sys:String>   
      </x:Array>
    </ListBox.ItemsSource>
  </ListBox>
</Window>

 

とすれば簡単に生成できる、よく質問される。

詰まるポイントとしては

  • xmlnsでsysと生成している部分のasseemblyを指定していないか、Systemが設定されている。インテリジェンスを使うとよく起こる。ちゃんとmscorlibを設定しよう。
  • x:Array、sys:Stringはインテリジェンス候補として表示されない。全て手動で入力しないといけない。
  • x:ArrayのTypeを設定したり、全てのコンテンツを入力しないと不適当なエラーが表示される。

つまり、エラーやインテリジェンスに惑わされない事が必要。正常なコードでもビルドするまでエラーが消えないことがよくあるので、WPFにおいてはVIsualStudioをあんまり信用しちゃいけませんよって事。

 

私もBlend使い始めた時は、何度も騙されました(笑)