2 Stimmen

WPF intern : Warum überschreibt UserControl AdjustBranchSource?

Durch die Verwendung von Reflektor können Sie sehen, dass WPF UserControl AdjustBranchSource überschreibt.

    internal override void AdjustBranchSource(RoutedEventArgs e)
{

   e.Source = this;

}

Mein ganz persönliches Problem betrifft die durch dieses Problem verursachte Inkonsistenz. Wenn ein Element innerhalb eines Benutzersteuerelements oder außerhalb basiert. Der Parameter Source verhält sich unterschiedlich. Was mich überrascht, die Quelle sollte immer das Element im Ziel durch die RoutedEvent sein.

Die Frage ist, warum wurde sie so umgesetzt?

3voto

Cameron MacFarland Punkte 67889

Das macht irgendwie Sinn. Wenn Sie die UserControl als eine Blackbox behandeln, dann sollten Sie nicht wissen, welche Steuerelemente auf sie sind, und damit die Quelle eines Ereignisses.

Wenn Sie zwischen verschiedenen Schaltflächen auf dem UserControl unterscheiden müssen, dann sollte das UserControl seine eigenen Ereignisse haben, die die Schaltflächen auslösen. Auf diese Weise sieht es von außen wie das richtige Ereignis aus und der Benutzer des UserControls muss nicht wissen, welche Schaltfläche welches Ereignis ausgelöst hat.

Um ein Beispiel zu nennen: Müssen Sie bei einer Listbox wissen, dass die Abwärtsrolltaste die Taste war, die das ursprüngliche Ereignis ausgelöst hat? Oder müssen Sie nur wissen, dass ein Abwärtsblättern-Ereignis ausgelöst wurde.

1voto

Kent Boogaart Punkte 170094

Die Quelle eines weitergeleiteten Ereignisses kann sich während der Weiterleitung des Ereignisses ändern. Ich bin mir nicht ganz sicher, warum UserControl ändert, aber kann man nicht einfach die OriginalSource Eigentum an RoutedEventArgs stattdessen?

0 Stimmen

Vielleicht, es ist eine Qual. Sie erhalten den ButtonChrome oder ein anderes Element wie Teil. Danach müssen Sie das Element aus dem visuellen Baum ableiten. ist nicht schön.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X