読者です 読者をやめる 読者になる 読者になる

お米 is ライス

C#やらUnityやらを勉強していて、これはメモっといたほうがええやろ、ということを書くつもりです

WPFのバグ?的なものを見つけたので報告

内容

Imageの所属を変えても変わっていなかったようで、もろもろのイベントが現在属しているWindow(あるいはCanvas)上で行われず、前のWindow(あるいはCanvas)上で発生していた。

状況

あるオブジェクトの子オブジェクトとしてImageを持たせて、必要に応じてCanvas上に描画するということをしていた。
MainWindowがあって、その上で別の子WindowをnewしてShowDialogしたものの中にあるCanvas上に、上記のImageを描画

子WindowをCloseしたのち、もう一度子WindowをnewしてShowDialogし、同じように上記のImageを描画

ImageのMouseDownイベントを実行したのち、CanvasのMouseMoveイベントで操作を行うようにしていたところ、うまく動作しない(イベントを書いているのはいずれもCanvasのコードの中)

ImageのMouseDownイベント上とCanvasのMouseMoveイベント上でGetHashCodeをしてその値を見比べてみたところ、それぞれ違う値が返ってきていた

さらに調べてみたところ、ImageのMouseDown上でGetHashCodeをした値は初めの子Window上で見た時と変わっていなかった

解決

Imageを持っているオブジェクトに、Imageを再読み込みするという関数を用意し、子WindowのClosingイベントの中で呼び出すようにしたところ上記のバグ?は解決した

結論

これがバグであるかどうかは微妙だけど、Imageを複数の親の間で使いまわしするなってことだろう