Comment ajouter une forme à InkCanvas à la position de la souris à l'aide de l'événement MouseDown WPF

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

Question

J'utilise le code suivant qui me permet de définir la taille et ajoute le carré à la toile d'encre lorsque je clique sur un bouton.Il ajoute la forme en haut à gauche de la toile.J'aimerais pouvoir ajouter la forme au canevas à l'endroit où je clique avec la souris sur le canevas.

Actuellement, j'obtiens la position de la souris :

private void inkCanvas_MouseMove(object sender, MouseEventArgs e)
{
    cursorCoords.Content = Mouse.GetPosition(Application.Current.MainWindow);

    // Get the x and y coordinates of the mouse pointer.
    System.Windows.Point position = e.GetPosition(this);
    pX = position.X;
    pY = position.Y;
}

Lorsque l'outil de forme est sélectionné (outil == 3), dessinez un carré à l'endroit où j'ai cliqué sur la toile d'encre.Cependant, cela ne fonctionne pas et dessine simplement un trait de stylo standard.De plus, lorsque je clique quelque part sur la toile d'encre, le contenu d'une étiquette ne met pas à jour les coordonnées de la position actuelle.

private void inkCanvas_MouseDown(object sender, MouseButtonEventArgs e)
{
    if (tool == 3)
    {
        coordstest.Content = pX + '-' + pY;
        switch (chosenShape)
        {
            case "square":
                Stroke oS = NewRectangle(pY, pX, size * 4, size * 4);

                DrawingAttributes attribs = new DrawingAttributes();
                attribs.Color = shapeColour;//Colors.LimeGreen;
                attribs.Height = 5.0;
                attribs.Width = 5.0;
                attribs.FitToCurve = false;

                oS.DrawingAttributes = attribs;
                inkCanvas.Strokes.Add(oS);
                break;
        }
    }
}

tool est l'outil sélectionné, stocké dans un octet sous la forme 1, 2 ou 3 pour le stylo, la couleur d'arrière-plan et la forme.shapeChosen est une chaîne, il y aura l'option carré, étoile, cercle, triangle.

Y a-t-il quelque chose qui me manque dans le gestionnaire d'événements inkcanvas mouse down pour que ce qui précède se produise ?Comment arrêter le dessin au stylo lorsque je souhaite placer une forme ?

Était-ce utile?

La solution

Dans ce cas MouseDown l'événement ne fonctionne pas, car il est géré par InkCanvas et il n'est pas diffusé, alors essayez ces solutions :

JE.Utilisez le AddHandler:

Spécifiez handledEventsToo comme true pour que le gestionnaire fourni soit invoqué pour un événement routé qui avait déjà été marqué comme géré par un autre élément le long de la route des événements.

Exemple:

private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
    MyInkCanvas.AddHandler(InkCanvas.MouseDownEvent, new MouseButtonEventHandler(InkCanvas_MouseDown), true);
}

private void InkCanvas_MouseDown(object sender, MouseButtonEventArgs e)
{

}

II.Essayez d'utiliser PreviewMouseDown au lieu de MouseDown, car PreviewMouseDown est un événement tunnelisé et exécuté en premier, avant les événements de bulle.

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