状況: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