MouseDown 이벤트 WPF를 사용하여 마우스 위치에 inkcanvas에 모양을 추가하려면 어떻게합니까?

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

문제

나는 단추를 클릭 할 때 크기를 설정하고 사각형을 인스턴스에 추가 할 수있는 다음 코드를 사용합니다. 캔버스의 왼쪽 상단에 모양을 추가합니다. 캔버스에서 마우스를 클릭하는 위치에서 캔버스에 모양을 추가하고 싶습니다.

현재 마우스 위치를 얻습니다 :

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

모양 도구가 선택되면 (도구== 3) Inkcanvas를 클릭 한 위치에 사각형을 그립니다. 그러나 이것은 그러나 표준 펜 스트로크를 그립니다. 또한 InkCanvas의 어딘가에서 클릭하면 레이블 내용을 현재 위치 좌표로 업데이트하지 않습니다.

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는 펜, 배경색 및 모양을 위해 1, 2 또는 3의 바이트에 저장된 공구입니다. shapeChosen 문자열이며, 정사각형, 별, 원, 삼각형 옵션이 있습니다.

위의 일이 발생하기 위해 잉크 카바 마우스 마우스 다운 이벤트 핸들러에 누락 된 것이 있습니까? 모양을 놓고 싶을 때 펜 도면을 어떻게 멈추게합니까?

도움이 되었습니까?

해결책

이 경우 MouseDown 이벤트가 작동하지 않아, InkCanvas에 의해 처리되고 버블 러가되지 않으므로 다음 해결 방법을 시도해보십시오.

i. "Nofollow"> AddHandler :

이벤트 라우트를 따라 다른 요소가 처리 한 라우트 된 이벤트에 대해 제공된 핸들러가 이미 표시된 라우트 핸들러에 대해 호출 할 수있는 핸들러를 True로 지정합니다.

예 :

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. relinsedown.nofollow"> PreviewMouseDown를 사용해보십시오PreviewMousEdown이 터널링 된 이벤트이기 때문에 MouseDown 대신 대신에 버블 이벤트 전에 먼저 그의 주행되었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top