WPF - comment gérer les événements de la souris à l'extérieur composant qui a soulevé cet événement?

StackOverflow https://stackoverflow.com/questions/1077938

Question

Contexte:

Il y a une application dans laquelle vous dessiner des choses sur toile. Où utilisateur clique, il y a un point noir, par exemple. Mais manipulation que les événements soulevés par la toile dans les gestionnaires d'événements dans le code de la fenêtre principale est juste laid pour moi. J'ai donc écrit une classe méthodes miroir toile événements de souris et j'appelle ces méthodes à l'intérieur de gestionnaire d'événements.

public partial class Window1 : Window
{
    DrawingTool drawTool = new DrawingTool();
    public Window1()
    {
        InitializeComponent();            
    }

    private void drawingCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        drawTool.OnMouseLeftButtonDown(e);
    }
}

Nice, mais je veux plus ...

Question:

Est-il possible de gérer les événements soulevés par la toile dans ma classe DrawingTool directement sans avoir des gestionnaires d'événements de toile définis. Je voudrais garder ma manipulation du code Window1 propre et concentré sur des choses de la fenêtre et déplacer des événements complètement dans mes cours.

Je pensais à tirer DrawingTool de FrameworkElement, passer outre OnRender et dessiner de manière transparente sur la toile afin de clic de l'utilisateur semblait être fait sur toile mais en fait serait soulevée dans DrawingTool et traitées à l'interne. Cette approche fonctionne avec des fonctionnalités de dessin (après le dessin est fait objet dessiné est ajouté aux enfants de toile et enlevé des enfants DrawingTool) mais quand il est en mode de sélection ou d'autres, il y a des problèmes avec un test de recherche d'éléments par exemple.

Alors, je serai reconnaissant pour toute suggestion comment tout pour résoudre mon problème ou une explication pourquoi cela est une idée stupide:)

Était-ce utile?

La solution

Il suffit d'exposer les champs de contrôle privé en tant que propriétés publiques et quand vous avez une instance de Window1 vous pouvez simplement faire

Window1.DrawingCanvas.MouseLeftButtonDown += YourHandlerMethod;

Autres conseils

Je ne sais pas si je suis bien votre problème, et je ne l'ai joué avec WPF un peu, mais que diriez-vous de créer un contrôle utilisateur qui contient votre toile et la manipulation de la souris et le dessin là-bas? Cela pourrait être nommé ou similaire DrawingControl.

De cette façon, vous seriez en mesure d'avoir le code de dessin contenu dans la classe qui représente le contrôle. Vous voudrez peut-être donner au nouveau contrôle utilisateur une propriété qui permet d'accéder à la toile « interne ».

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top