2009-03-15 7 views
2

リフレクターを使用すると、WPF UserControlがAdjustBranchSourceをオーバーライドしていることがわかります。WPF内部:なぜUserControlがAdjustBranchSourceをオーバーライドしていますか?

internal override void AdjustBranchSource(RoutedEventArgs e) 
{ 

    e.Source = this; 

} 

私の非常に問題は、その問題によって引き起こされる不一致です。 エレメントがユーザコントロール内または外部にあるとき。 Sourceパラメータの動作は異なります。これは、RoutedEventによって常にソースが目標の要素になるはずです。

なぜそれがそのように実装されたのですか?

答えて

3

これはちょっと意味があります。 UserControlをブラックボックスとして扱う場合、どのコントロールがその上にあるのか、したがってイベントのソースがわからないはずです。

UserControlの異なるボタンを区別する必要がある場合、UserControlはボタンがトリガーする独自のイベントを持つ必要があります。そのように外部からは正しいイベントのように見え、UserControlのユーザーはどのボタンがどのイベントをしたのかを知る必要はありません。

たとえば、リストボックスで、元のイベントを送信したボタンがダウンスクロールボタンであることを知る必要がありますか?または、スクロールダウンイベントが発生したことを知る必要がありますか?

1

ルーティングされたイベントの送信元は、イベントのルーティングを通じて変更される可能性があります。私は完全になぜUserControlそれを変更するが、RoutedEventArgsの代わりにプロパティを使用することはできませんか?

+0

痛いかもしれません。 ButtonChromeや他の要素をpartのように取得します。その後、ビジュアルツリーから要素を推論する必要があります。かなりではありません。 – ArielBH

関連する問題