Come posso aggiungere forma a inkcanvas nella posizione del mouse utilizzando il WPF di MouseDown Event WPF

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

Domanda

Io uso il seguente codice che mi consente di impostare la dimensione e aggiungere il quadrato all'Inkcanvas quando faccio clic su un pulsante. Aggiunge la forma alla parte in alto a sinistra della tela. Mi piacerebbe essere in grado di aggiungere la forma alla tela nella posizione in cui faccio clic con il mouse sulla tela.

Attualmente ottengo la posizione del mouse:

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;
}
.

Quando è selezionato lo strumento Forma (strumento== 3) Disegna un quadrato nella posizione in cui ho cliccato sull'Inkcanvas. Questo non funziona comunque e disegna solo un colpo di penna standard. Anche quando clicco da qualche parte sull'Inkcanvas non aggiorna un contenuto di etichette alle coordinate di posizione corrente.

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 è lo strumento selezionato, memorizzato in un byte come 1, 2 o 3 per penna, colore di sfondo e forma. shapeChosen è una stringa, ci sarà l'opzione di quadrato, stella, cerchio, triangolo.

C'è qualcosa che mi manca nel gestore di eventi del mouse inkcanvas per far succedere quanto sopra? Come posso fermare il disegno della penna quando voglio mettere una forma?

È stato utile?

Soluzione

In questo caso l'evento MouseDown non funziona, perché viene gestito dall'Inkcanvas e non è dotato di gorgogliare, quindi prova queste soluzioni:

i.Utilizzare il AddHandler : .

Specificare HandledLeventStoo come VERO per avere il gestore fornito invocato per evento instradato che era già stato contrassegnato come gestito da un altro elemento lungo il percorso dell'evento.

Esempio:

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.Prova a usare PreviewMouseDown invece di MouseDown , poiché AnteprimaMouseDown è un evento a tunneling, e il suo per primo, prima degli eventi a bolle.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top