1

ユーザーが Silverlight の DataGrid で行を選択したときに、カスタムの確認メッセージ ボックス (ChildWindow) を表示したいと考えています。メッセージ ボックスには、[はい] と [いいえ] の 2 つのボタンしかありません。ユーザーが [いいえ] をクリックしたときに、DataGrid で以前に選択した項目を復元したいと考えています。私はそれをすべて達成することができました。

問題は、メッセージ ボックスが表示され、[いいえ] をクリックして以前に選択した項目を復元すると、ユーザーが選択しようとした項目が、マウスを他の行に移動するまで MouseOver の視覚状態のままになることです。

DataGrid のこの異常な動作に対する既知の回避策はありますか? それとも、これはおそらくコントロールの正当なバグですか? 私は調査を行いましたが、まだ何も見つかりませんでした。

どんな助けでも大歓迎です。

ありがとう!

4

1 に答える 1

0

これは、Silverlight の多くの領域で一般的であり、実際には他の多くのフレームワークでも一般的な、古典的なマウスの開始/終了の問題です。マウス イン イベントとマウス アウト イベントはペアで発生すると想定されていますが、他の何かがマウス イベントをハイジャックした場合は発生しません。

これが、DataGridRow が標準のマウス イベントを使用してマウス オーバーを単純に追跡している、ここで起こっていることです。ただし、マウスオーバー状態で子ウィンドウを表示すると、それ以上のマウスイベントは行に移動しません。子ウィンドウを閉じると、マウスはすでに行の外にあるため、イベントは発生しません。

可能な回避策は、子ウィンドウを表示する前に行の視覚的な状態を自分でいじることです:-

VisualStateManager.GotoState(someRow, "NormalSelected", false);

完璧ではありませんが、十分に可能です。

于 2010-11-24T20:55:09.063 に答える