2009-09-14 12 views
7

Gibt es eine Standardmethode, alle Schlüsselereignisse von der Steuerung A zu anderen Steuerelement B zu routen? Ich wünsche, dass der Tastaturfokus immer noch auf A ist, aber der Event-Handler von A würde die All-Event-Handler von B für die Schlüsselereignisse auslösen.Routing-Key-Ereignisse zu anderen Steuerelement

bearbeiten: Klarstellung: Aufruf eines bestimmten Event-Handler Ich schrieb für B ist nicht genug. Ich muss das tatsächliche Ereignis nachahmen. Zum Beispiel möchte ich, dass, wenn ein Schlüssel an eine TextBox gesendet wird, würde es in die TextBox geschrieben werden. Die unten angegebene Lösung tut das nicht (ganz zu schweigen von der Tatsache, dass, wenn neue Event-Handler zu B hinzugefügt werden, es komplett fehlschlägt).

Ich bin mir bewusst, dass WPF unterscheidet zwischen logischem Fokus und Tastaturfokus, aber ich brauche beide Fokussen auf Steuerelement A bleiben, aber in bestimmten Fällen route das eingehende Ereignis zu anderen Steuerelementen.

+0

Können Sie nicht einfach Ihre Schlüsselereignisse für die Kontrolle A machen? Führen Sie einige Überprüfungen durch und rufen Sie bei Bedarf die Schlüsselereignisse für die Kontrolle B auf? – Relster

+0

Nein! Das würde das Ereignis nicht auslösen, es würde nur eine einzelne spezifische Funktion aufrufen, die einmal mit dem Klickereignis der Schaltfläche verknüpft war. Ich möchte das tatsächliche Ereignis simulieren, das WPF sendet. –

+0

@Elazar - Siehe meine Bearbeitung. Würde die 'RaiseEvent()' Methode stattdessen funktionieren? – Donut

Antwort

4

Konnten Sie so etwas nicht tun?

private void button1_Click(object sender, RoutedEventArgs e) 
    { 
    // Check if the event needs to be passed to button2's handler 
    if (conditionIsMet) 
    { 
     // Send the event to button2 
     button2.RaiseEvent(e); 
    } 
    else 
    { 
     // button1's "Click" code 
    } 
    } 

    private void button2_Click(object sender, RoutedEventArgs e) 
    { 
    // button2's "Click" code 
    } 

Edit: Modified Code die RaiseEvent() Methode verwenden programmatisch ein bestimmtes Ereignis zu erhöhen, anstatt nur für button2 den Event-Handler aufrufen.

+0

Nein! Das würde das Ereignis nicht auslösen, es würde nur eine einzelne spezifische Funktion aufrufen, die einmal mit dem Klickereignis der Schaltfläche verknüpft war. Ich möchte das tatsächliche Ereignis simulieren, das WPF sendet. –

+0

Das habe ich gesucht! –

+0

Ich frage mich, warum es Raise Events genannt wird. Ich googelte für Feuer-Ereignis und Ereignis aufrufen und Ereignis auslösen, aber ohne Ergebnisse ... –

Verwandte Themen