Control のベースクラスを作る。その2
ということで、前回の最後に XamlReader での挙動がきになると書いたので、試してみました。
前回の ControlBase を継承する MyControl と 同じように ControlBase を継承する OriginalControl を追加しました。
namespace MyApp { public partial class OriginalControl : ControlBase { public OriginalControl() { InitializeComponent(); } public string Subject { get; set; } } }
MyControl には Title プロパティを追加してみました。
namespace MyApp { public partial class MyControl : ControlBase { public MyControl() { InitializeComponent(); } public string Title { get; set; } } }
で、複数の ControlBase を持てるように Controls クラスを作ります。
namespace MyApp { public class Controls { public Controls() { this.Children = new List<ControlBase>(); } public List<ControlBase> Children { get; private set; } } }
準備完了です。XamlReader で読み込んでみます。
XamlReader.Load(@"<Controls xmlns='http://schemas.microsoft.com/client/2007' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' <Controls.Children> <MyControl x:Name='c1' Title='title1' /> <OriginalControl x:Name='c2' Subject='title2' /> </Controls.Children> </Controls>");
Unknown Element Controls なんてメッセージが出ました。自動的に探してくれるんじゃないんだろうか・・・。
気を取り直してネームスペースを定義します。
XamlReader.Load(@"<local:Controls xmlns='http://schemas.microsoft.com/client/2007' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' xmlns:local='clr-namespace:SilverlightApplication8;assembly=SilverlightApplication8'> <local:Controls.Children> <local:MyControl x:Name='c1' Title='title1' /> <local:OriginalControl x:Name='c2' Subject='title2' /> </local:Controls.Children> </local:Controls>");
いけました。ちょいと謎な部分ものこりますが。