2010-11-24 26 views
1

Je souhaite afficher une boîte de message de confirmation personnalisée (ChildWindow) lorsque l'utilisateur sélectionne une ligne dans un DataGrid dans Silverlight. La boîte de message a simplement 2 boutons, un oui et un non. Lorsque l'utilisateur clique sur Non, je souhaite restaurer l'élément précédemment sélectionné dans le contrôle DataGrid. J'ai été capable d'accomplir tout cela. Le problème est que lorsque la boîte de message apparaît et que je clique sur NON et que je restaure l'élément précédemment sélectionné, l'élément que l'utilisateur a essayé de sélectionner reste dans l'état visuel de MouseOver jusqu'à ce que je passe la souris sur une autre ligne.Comment afficher une boîte de message personnalisée à partir de l'événement selectionchanged de la grille de données silverlight?

Existe-t-il une solution de contournement connue pour ce comportement inhabituel de DataGrid ou est-ce un bug légitime dans le contrôle? J'ai fait mes recherches et je n'ai encore rien trouvé.

Toute aide serait appréciée.

Merci!

Répondre

0

Il s'agit d'une entrée/sortie de souris classique, ce qui est courant dans de nombreux domaines de Silverlight et, en fait, dans de nombreux autres frameworks. L'hypothèse est que les événements d'entrée et de sortie de la souris viendront par paires, mais ils ne le font pas lorsqu'un autre élément détourne les événements de la souris.

C'est ce qui se passe ici que le DataGridRow suit de manière simpliste le survol de la souris en utilisant les événements de souris standard. Toutefois, lorsque vous affichez une fenêtre enfant alors qu'elle est dans l'état de la souris, aucun autre événement de souris ne se place sur la ligne. Lorsque vous fermez la fenêtre enfant, la souris est déjà à l'extérieur de la rangée, donc il n'y a toujours pas d'événements.

Une solution possible est de jouer avec l'état visuel de la ligne vous-même avant d'afficher la fenêtre enfant: -

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

Pas parfait mais possible assez bon.

+0

Fonctionne très bien! Merci! – killercolt