locked
カーソルの状態が戻らない症状 RRS feed

  • 質問

  • あるボタンをクリックすると、ボタンと共にカーソルも消える、といった動作をしたいと考えていただければいいと思います。
    ただし、ボタン上ではHand等のカーソルに変化するようにしています(させなければ問題はなぜか発生しません)。
    これがうまくいかないのです。

    画面上でオブジェクトが重なっているとします。
    上になっている方はMouseLeftButtonUpで自ら消えるようにプログラミングされています。
    消え方は、ストーリーボードでOpacityを変化させ、徐々に消えるように見せていますが、
    ストーリーボードの最後にはVisibilityをCollapsedにも設定しています。

    消えていくオブジェクトには、xamlでCursor="Hand"に設定していて、下のオブジェクトはCursor="None"になっていますが、ストーリーボードが完了してもマウスカーソルを少しでも動かさない限り、Handのままの状態になってしまいます。

    実は、実際のプログラムはもう少し話は複雑で、実際には上と下のオブジェクトの間にもう1つ以上オブジェクトが隠れていて、一番上のオブジェクトと中巻のオブジェクトはセットで消えていくようになっています。

    MouseLeftButtonUpでCursor="Arrow"に設定を戻してもArrowのまま残ってしまうし、オブジェクトが消えた後、下のオブジェクトをプログラムでCursor="None"を設定し直してもカーソルの形は変化しません。カーソルを少しでも動かさない限りだめなようです。

    ストーリーボードを無くしたらどうなるのか、とか、中間のオブジェクトを無くした場合どうなるのか、とか、もっと単純な形で実験すべきかも知れませんが、少なくとも、現状では期待通りの動作はしてくれませんし、回避策がどうしても見つかりません。Silverlightの問題動作と言ってもいいような気がします。

    なにか回避策はありますでしょうか?



    追記:
    下になっている方のオブジェクトに、MouseEnterイベントが発生しないことが根本原因としてあるような気もします。
    しかし、上になっているオブジェクトでカーソルの形状を変更させない場合には、消えた後に下のオブジェクトで新たにカーソルを設定すればそれが反映されるようなので、問題を回避する手だては見つかります。上のオブジェクトでカーソル形状を変更し、消える直前に元に戻しても同じようにはなりませんでした。
    2009年4月29日 14:02