Frage

Kontext:

Es gibt eine Anwendung, in der Sie die Dinge auf Leinwand ziehen. Wo Benutzer klickt gibt es einen schwarzen Punkt, zum Beispiel. Aber die Handhabung, dass durch Leinwand in Event-Handler in Hauptfenster Code ausgelöst Ereignisse nur für mich hässlich. Also schrieb ich eine Klasse, die Methoden Leinwand Mausereignisse spiegeln und ich nenne diese Methoden innerhalb Event-Handler.

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 angehoben zu handhaben direkt ohne Event-Handler definierten Leinwand mit. Ich möchte meine Window1 Code sauber halten und konzentrierte sich auf Fenster Sachen und bewegen Ereignisse vollständig in meinen Klassen Handhabung.

Ich dachte über DrawingTool von Framework abzuleiten, außer Kraft setzen OnRender und transparent über die Leinwand zu ziehen, so Benutzer Klicke auf Leinwand gemacht zu werden schien, aber in der Tat in DrawingTool erhöht werden würde und intern behandelt. Dieser Ansatz funktioniert mit Zeichnung Funktionalität (nach Zeichnung erfolgt gezeichnetes Objekt wird auf der Leinwand Kinder hinzugefügt und von DrawingTool Kindern entfernt), aber wenn es um die Auswahl-Modus oder anderen kommt es Probleme mit Treffertests von Elementen zum Beispiel.

Also, ich werde für jeden Vorschlag dankbar, wie mein Problem oder Erklärung zu lösen, warum dies eine dumme Idee ist, überhaupt:)

War es hilfreich?

Lösung

aussetzen Gerade die privaten Kontrollfelder als öffentliche Eigenschaften und wenn Sie eine Instanz von Window1 haben, können Sie nur tun

Window1.DrawingCanvas.MouseLeftButtonDown += YourHandlerMethod;

Andere Tipps

Ich bin mir nicht sicher, ob ich das Problem richtig verstanden habe, und ich habe nur mit WPF ein wenig, aber wie über das Erstellen eine Benutzersteuerung, die enthält Ihre Leinwand und Umgang mit der Maus und zeichne dort gespielt? Dies könnte DrawingControl oder dergleichen genannt werden.

Auf diese Weise Sie in der Lage sein würden, die Zeichnung Code in der Klasse enthalten sind, zu haben, die die Steuerung darstellt. Sie könnten der neue Benutzersteuerung eine Eigenschaft geben möchten, den Zugriff auf die „interne“ Leinwand ermöglicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top