none
Como só não deixar os objetos saiem de dentro do canvas qdo mover? RRS feed

  • Pergunta

  •  

    Olá pessoal, como estão?

     

    Estou inserindo figuras no canvas, mas qdo vou seleciono um objeto e vou movimentá-lo é eu consigo fazer com que o objeto saia fora do canvas e fique em qualquer posicão dentro do window.

     

    Como não deixar o objeto sair de dentro do camvas?

     

    Alguém tem alguma ideía?

     

     

    Muito Obrigado.

     

    Abraços

    quarta-feira, 9 de janeiro de 2008 19:36

Respostas

  • Teste para ver se a posição está dentro do Canvas e mude a posição. Este código finaliza a movimentação se você tentar mover para fora do canvas:

    // Calcula nova posição
    double newLeft = CurrentLeft + Pt.X - start.X;
    double newTop = CurrentTop + Pt.Y - start.Y;

    if ((newLeft < 0) || (newTop < 0) ||
        (newLeft + movedElement.ActualWidth > canvas1.ActualWidth) ||

        (newTop + movedElement.ActualHeight > canvas1.ActualHeight))
    {
        endDrag = true;

        if (newLeft < 0)
            newLeft = 0;
        if (newTop < 0)
            newTop = 0;
        if (newLeft + movedElement.ActualWidth > canvas1.ActualWidth)
            newLeft = canvas1.ActualWidth - movedElement.ActualWidth;
        if (newTop + movedElement.ActualHeight > canvas1.ActualHeight)
            newTop = canvas1.ActualHeight - movedElement.ActualHeight;
    }
    // Reposiciona elemento
    movedElement.SetValue(Canvas.LeftProperty, newLeft);
    movedElement.SetValue(Canvas.TopProperty, newTop);

    if (endDrag)
        canvas1_PreviewMouseUp(sender, null);

    Bruno
    quinta-feira, 10 de janeiro de 2008 09:26

Todas as Respostas

  • Teste para ver se a posição está dentro do Canvas e mude a posição. Este código finaliza a movimentação se você tentar mover para fora do canvas:

    // Calcula nova posição
    double newLeft = CurrentLeft + Pt.X - start.X;
    double newTop = CurrentTop + Pt.Y - start.Y;

    if ((newLeft < 0) || (newTop < 0) ||
        (newLeft + movedElement.ActualWidth > canvas1.ActualWidth) ||

        (newTop + movedElement.ActualHeight > canvas1.ActualHeight))
    {
        endDrag = true;

        if (newLeft < 0)
            newLeft = 0;
        if (newTop < 0)
            newTop = 0;
        if (newLeft + movedElement.ActualWidth > canvas1.ActualWidth)
            newLeft = canvas1.ActualWidth - movedElement.ActualWidth;
        if (newTop + movedElement.ActualHeight > canvas1.ActualHeight)
            newTop = canvas1.ActualHeight - movedElement.ActualHeight;
    }
    // Reposiciona elemento
    movedElement.SetValue(Canvas.LeftProperty, newLeft);
    movedElement.SetValue(Canvas.TopProperty, newTop);

    if (endDrag)
        canvas1_PreviewMouseUp(sender, null);

    Bruno
    quinta-feira, 10 de janeiro de 2008 09:26
  • Bruno,

     

    Deu certo aqui! Obrigado hein...

     

    Agora vou tentar fazer o canvas aumentar quando chego com a figura perto do limite do canvas na parte de parte e do lado direito.

     

    Obrigado abraços

     

    quinta-feira, 10 de janeiro de 2008 16:06