コンテクスト:
キャンバスに物を描くアプリケーションがあります。たとえば、ユーザーがクリックすると黒い点が表示されます。しかし、メインウィンドウコードのイベントハンドラーでcanvasによって発生したイベントを処理することは、私にとっては醜いです。そこで、キャンバスのマウスイベントをミラーリングするクラスを作成し、イベントハンドラー内でそれらのメソッドを呼び出しました。
public partial class Window1 : Window
{
DrawingTool drawTool = new DrawingTool();
public Window1()
{
InitializeComponent();
}
private void drawingCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
drawTool.OnMouseLeftButtonDown(e);
}
}
いいですが、もっと欲しいです...
質問:
キャンバスイベントハンドラーを定義しなくても、DrawingToolクラスでcanvasによって発生したイベントを直接処理することはできますか?Window1コードをクリーンに保ち、ウィンドウ関連に焦点を合わせ、イベント処理を完全にクラスに移動したいと思います。
FrameworkElementからDrawingToolを派生させ、OnRenderをオーバーライドしてキャンバス上に透過的に描画することを考えたので、ユーザーのクリックはキャンバス上で行われたように見えましたが、実際にはDrawingToolで発生し、内部で処理されます。このアプローチは描画機能で機能します(描画が完了すると、描画されたオブジェクトはキャンバスの子に追加され、DrawingToolの子から削除されます)が、選択モードなどに関しては、たとえば要素のヒットテストに問題があります。
だから、私の問題を解決する方法の提案や、これがまったく愚かな考えである理由の説明に感謝します:)