2

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

    internal override void AdjustBranchSource(RoutedEventArgs e)
{

   e.Source = this;

}

私自身の問題は、その問題によって引き起こされる矛盾に関するものです。要素がユーザー コントロールの内部または外部に基づいている場合。Source パラメーターの動作は異なります。ソースは常に RoutedEvent のターゲットの要素でなければならないことに驚きました。

問題は、なぜそのように実装されたのですか?

4

2 に答える 2

3

これはちょっと理にかなっています。UserControlをブラックボックスとして扱う場合は、その上にあるコントロール、つまりイベントのソースを知る必要はありません。

UserControlのさまざまなボタンを区別する必要がある場合、UserControlには、ボタンがトリガーする独自のイベントが必要です。そうすれば、外部からは適切なイベントのように見え、UserControlのユーザーはどのボタンがどのイベントを実行したかを知る必要がありません。

例を挙げると、リストボックスで、下スクロールボタンが元のイベントを送信したボタンであったことを知る必要がありますか?または、スクロールダウンイベントがトリガーされたことを知る必要がありますか。

于 2009-03-15T22:25:11.610 に答える
1

ルーティング イベントのソースは、イベントのルーティング中に変化する可能性があります。なぜUserControlそれを変更するのか完全にはわかりませんが、代わりにOriginalSourceon プロパティを使用することはできませんか?RoutedEventArgs

于 2009-03-15T21:43:11.383 に答える