Como faço para adicionar a forma para InkCanvas na posição do mouse usando o evento MouseDown do WPF

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

Pergunta

Eu uso o seguinte código, que me permite definir o tamanho e adiciona o quadrado inkcanvas quando eu clicar em um botão.Ele adiciona a forma para a parte superior esquerda da tela.Eu gostaria de ser capaz de adicionar a forma para a lona no local onde eu clique com o mouse na tela.

Atualmente recebo a posição do 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 a forma de ferramenta (tool == 3) desenhar um quadrado na posição onde eu cliquei no inkcanvas.Isso não funciona, no entanto e apenas desenha uma caneta padrão avc.Também quando eu clicar em algum lugar no inkcanvas não atualização de um etiquetas de conteúdo, para a posição de coordenadas.

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 é a ferramenta selecionada, armazenado em um byte como 1, 2 ou 3 para caneta, cor de fundo e de forma.shapeChosen é uma seqüência de caracteres, haverá a opção de quadrado, estrela, círculo, triângulo.

Existe algo que eu estou em falta no inkcanvas mouse para baixo manipulador de eventos para fazer a acima acontecer?Como faço para parar a caneta de desenho quando eu quiser colocar uma forma?

Foi útil?

Solução

Neste caso, MouseDown evento não funcionam, como é tratado pelo InkCanvas e ele não está sendo acusado, portanto, tente estas soluções:

I.Use o AddHandler:

Especificar handledEventsToo como true para que o fornecido manipulador de ser chamado para o evento roteado, que já tinha sido marcado como tratado pelo outro elemento ao longo do evento da rota.

Exemplo:

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.Tente usar PreviewMouseDown em vez de MouseDown, porque PreviewMouseDown é encapsulado evento, e sua rodava em primeiro lugar, antes da bolha de eventos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top