Kontext:WPF - Wie behandelt man Mausereignisse außerhalb der Komponente, die dieses Ereignis ausgelöst hat?
Es gibt eine Anwendung, wo Sie Dinge auf der Leinwand zeichnen. Wo der Nutzer klickt, gibt es zum Beispiel einen schwarzen Punkt. Aber die Handhabung von Events, die von Canvas in Event-Handlern im Hauptfenster-Code ausgelöst werden, ist nur hässlich für mich. Also habe ich eine Klasse geschrieben, die Methoden für Canvas-Maus-Events verwendet und diese Methoden im Event-Handler aufruft.
public partial class Window1 : Window
{
DrawingTool drawTool = new DrawingTool();
public Window1()
{
InitializeComponent();
}
private void drawingCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
drawTool.OnMouseLeftButtonDown(e);
}
}
Nizza, aber ich will mehr ...
Frage:
Ist es möglich, Ereignisse, die von Leinwand in meiner DrawingTool Klasse ohne definierte Leinwand Event-Handler direkt angehoben zu handhaben. Ich möchte meinen Window1-Code sauber halten und mich auf Fensterkram konzentrieren und die Ereignisbehandlung komplett in meine Klassen integrieren.
Ich dachte DrawingTool von FrameworkElement ableiten, OverRender überschreiben und es transparent über die Zeichenfläche, so dass Benutzer klicken auf Leinwand, aber tatsächlich würde in DrawingTool ausgelöst und intern behandelt werden. Dieser Ansatz funktioniert mit der Zeichnungsfunktionalität (nach dem Zeichnen wird das gezeichnete Objekt zu Canvas-Children hinzugefügt und aus den DrawingTool-Children entfernt), aber wenn es um den Selektionsmodus oder andere geht, gibt es zum Beispiel Probleme beim Testen von Elementen.
So werde ich für jeden Vorschlag dankbar, wie mein Problem oder Erklärung zu lösen, warum dies eine dumme Idee überhaupt ist :)
Das ist ziemlich einfache Lösung und ich habe nicht darüber nachgedacht. Ich suchte nach Event-Settern, die in Mode waren, oder nach einem cleveren Delegierten-Voodoo, aber wie immer war Ocham's Rasiermesser praktisch :) Thx. – grapkulec