こんなXAMLがあるとします。
<local:MyClass> <local:MyClass.Values> <local:Value /> <local:Value /> </local:MyClass.Values> </local:MyClass>
なんだかValuesってやるのめんどくさくないですか。めんどくさいですよね。標準の要素ならこういう風に書けます。
<Grid> <Control /> <Control /> </Grid>
これは省略された書き方で、省略しない場合は次の様に書きます。
<Grid> <Grid.Children> <Control /> <Control /> </Grid.Children> </Grid>
このプロパティ名の省略、自作のクラスでも対応できます。
XAMLの子要素を格納するプロパティを指定するにはC#で次の様に書きます。
[ContentProperty(Name="Values")] public class MyClass { public IList<Value> Values { get; set; } }
ここで重要なのがContentProperty Attribute。これが指定されていると XAMLパーサは子要素をこのプロパティに格納しようとします。
その結果、このクラスは子要素をValuesプロパティに格納しようとするので 冒頭のXAMLはこのようにかけます。
<local:MyClass> <local:Value /> <local:Value /> </local:MyClass>
とっても便利なのでみなさんも是非。というかよく忘れるのでメモです。