Je suis en train d'implémenter une lecture de "valeur sous le curseur" pour le contenu de la carte. Actuellement, je suis en utilisant ce ReactiveExtensions réalisais et inscrivez-vous à l'événement GetMouseMove sur mon arrière-plan graphique Grille:Comment déclencher manuellement un événement MouseMove pour une souris fixe
private void SetupMouseover(Grid plotArea)
{
var mouseMove = from mo in plotArea.GetMouseMove()
select new
{
CurrentPos = mo.EventArgs.GetPosition(plotArea)
};
mouseMove.Subscribe(
item =>
{
// Update the readout contents
readoutTextBlock.Text = PositionToReadoutValue(item.CurrentPos);
}
);
}
Et ça fonctionne bien. Je peux déplacer ma souris et mettre à jour mon bloc de texte.
Le problème est que le contenu de la carte est mis à jour dynamiquement (en se déplaçant sur l'écran). Si je laisse le curseur de la souris stationnaire sur le point, le contenu en dessous change (mais évidemment) l'affichage n'est pas mis à jour.
je tenté de déclencher manuellement le déplacement de la souris en réglant la position du curseur sur lui-même chaque fois que les données du modèle a été mis à jour:
private void MoveCursor()
{
// move the mouse cursor 0 pixels
System.Windows.Forms.Cursor.Position = new System.Drawing.Point(System.Windows.Forms.Cursor.Position.X,
System.Windows.Forms.Cursor.Position.Y);
}
Cela n'a pas déclenché le rappel. Définir la position à être (X-1, Y-1) DID déclencher le rappel, mais si je remets immédiatement le pixel à l'emplacement d'origine (X + 1, Y + 1), cela ne déclenche pas le rappel de mousemove pour Position définie. J'ai également essayé de définir manuellement readoutTextBlock sur la notification de mon modèle modifié en fonction de Mouse.GetPosition (m_PlotArea), mais j'ai rencontré des problèmes de threads (le modèle est mis à jour dans un thread séparé) et aussi des problèmes de test avec m_PlotArea.
Des suggestions?
C'est une belle manière propre à amalgamer les événements. Ce n'est pas exactement ce que je recherchais, mais c'est un moyen plus propre que le hack que je mettais en place. À votre santé –