컨텍스트 :WPF - 해당 이벤트를 발생시킨 구성 요소 외부에서 마우스 이벤트를 처리하는 방법?
캔버스에서 물건을 그리는 응용 프로그램이 있습니다. 예를 들어 사용자가 검은 점이있는 곳을 클릭합니다. 그러나 메인 윈도우 코드의 이벤트 핸들러에서 캔버스로 발생하는 이벤트를 처리하는 것은 저에게는보기 흉합니다. 그래서 캔버스 마우스 이벤트를 미러링하는 클래스를 작성하고 이벤트 핸들러 내에서 그 메소드를 호출합니다.
public partial class Window1 : Window
{
DrawingTool drawTool = new DrawingTool();
public Window1()
{
InitializeComponent();
}
private void drawingCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
drawTool.OnMouseLeftButtonDown(e);
}
}
니스,하지만 난 더 원해 ...
질문 :
가 직접 정의 캔버스 이벤트 핸들러를하지 않고 내 DrawingTool 클래스에 캔버스에 의해 발생한 이벤트를 처리 할 수 있습니다. 내 Window1 코드를 깨끗하게 유지하고 창에 집중하고 이벤트를 완전히 내 클래스로 옮기고 싶습니다.
FrameworkElement에서 DrawingTool을 파생시키고 OnRender를 재정 의하여 캔버스 위에 투명하게 그려 사용자의 클릭이 캔버스에서 만들어진 것처럼 보였지만 실제로 DrawingTool에서 발생되어 내부적으로 처리되도록했습니다. 이 접근법은 드로잉 기능과 함께 작동합니다 (그리기가 끝난 후에 그려진 객체가 캔버스 하위에 추가되고 DrawingTool 하위에서 제거됨). 그러나 선택 모드 또는 다른 경우에는 요소의 히트 테스트에 문제가 있습니다. 이 전혀 바보 같은 생각 :
그건 꽤 간단한 해결책이고 나는 그것에 대해 생각하지 않았습니다. 이벤트 스타일러를 스타일이나 영리한 대표자 부두에 배치하고 있었지만, 보통 okham의 면도기는 유용했습니다 :) Thx. – grapkulec