WPFにあってSilverlight 2 Beta 2にないシリーズ「UIElement.AddHandlerメソッド」

XAML「 Window1.xaml 」( WPF

<Button Click="Button_Click"/>


Visual Basic「 Window1.g.vb 」( WPF
AddHandler CType(target,System.Windows.Controls.Button).Click, New System.Windows.RoutedEventHandler(AddressOf Me.Button_Click)


WPFでも、イベントはAddHandlerステートメントによってイベントハンドラに関連付けされます。


WPFではルーティングイベントを採用しているため、下記のように親要素に共通のイベントハンドラを配置することができます。


XAML「 Window1.xaml 」( WPF
<Grid Button.Click="Button_Click">
    <Button/>
</Grid>


Visual Basic「 Window1.g.vb 」( WPF
CType(target,System.Windows.Controls.Grid).AddHandler(System.Windows.Controls.Primitives.ButtonBase.ClickEvent, New System.Windows.RoutedEventHandler(AddressOf Me.Button_Click))


この場合Clickイベント自体はButtonのイベントですが、XAMLで定義している場所はGrid要素になっています。このような親要素をイベントのリスナとして登録することはAddHandlerステートメントではできませんので、代わりにUIElement.AddHandlerメソッドが使用されています。


Silverlight 2 Beta 2でもルーティングイベントは採用されています(トンネルはない)が、UIElement.AddHandlerメソッドは用意されていないため親要素に共通のイベントハンドラを配置することはできないようです。