Je n'ai besoin que d'afficher un contrôle personnalisé (une horloge avec des aiguilles rotatives) et de remplacer le curseur de la souris si j'utilise un fichier .cur ou .ani pour remplacer le curseur de la souris Me.CUrsor = Nouveau curseur ("chemin absolu du fichier .ani") il n'y a pas de problème: je peux changer le curseur pendant une procédure: mais la qualité de l'animation est très mauvaise, et, pour d'autres raisons aussi, Je préférerais utiliser mon petit contrôle utilisateur. Le problème est que si j'écris:wpf forcer la mise à jour de la fenêtre de l'interface utilisateur lors d'une procédure
Me.gridScreen.Visibility = Visibility.Visible
'certaines opérations qui prend environ 1 seconde
Me.gridScreen.Visibility = Visibility.Hidden
(gridScreen est la grille qui contient le contrôle de l'utilisateur)
Évidemment, je ne vois rien, parce que la mise à jour de l'interface utilisateur se produit à la fin de la procédure. J'ai essayé Me.UpdateLayout(), mais cela ne fonctionne pas.
Je tryed d'utiliser le dispacker dans de nombreux cours, mais aucun qui fonctionne :-(
Ceci est ma tentative perdue:
(uCurClock est le usercontrol, gridScreen une grille placée au plus haut niveau dans la fenêtre, avec un fond trasparent, qui contient le usercontrol)
Private Sub showClock()G
Dim thread = New System.Threading.Thread(AddressOf showClockIntermediate)
thread.Start()
End Sub
Private Sub hideClock()
Dim thread = New System.Threading.Thread(AddressOf hideClockIntermediate)
thread.Start()
End Sub
Private Sub showClockIntermediate()
Me.Dispatcher.BeginInvoke(DispatcherPriority.Normal, New Action(AddressOf showClockFinale))
End Sub
Private Sub hideClockIntermediate()
Me.Dispatcher.BeginInvoke(DispatcherPriority.Normal, New Action(AddressOf hideClockFinale))
End Sub
Private Sub showClockFinale()
Dim pt As Point = Mouse.GetPosition(Nothing)
Me.uCurClock.Margin = New Thickness(pt.X - 9, pt.Y - 9, 0, 0)
Me.gridScreen.Visibility = Visibility.Visible
Me.Cursor = Cursors.None
Me.UpdateLayout()
End Sub
Private Sub hideClockFinale()
Me.gridScreen.Visibility = Visibility.Hidden
Me.Cursor = Cursors.Arrow
Me.UpdateLayout()
End Sub
Private Sub u_MouseMove(ByVal sender As System.Object, ByVal e As MouseEventArgs) Handles gridScreen.MouseMove
Dim pt As Point = e.GetPosition(Nothing)
Me.uCurClock.Margin = New Thickness(pt.X - 9, pt.Y - 9, 0, 0)
e.Handled = True
End Sub
Private Sub u_MouseEnter(ByVal sender As System.Object, ByVal e As MouseEventArgs) Handles gridScreen.MouseEnter
Me.uCurClock.Visibility = Visibility.Visible
e.Handled = True
End Sub
Private Sub u_MouseLeave(ByVal sender As System.Object, ByVal e As MouseEventArgs) Handles gridScreen.MouseLeave
Me.uCurClock.Visibility = Visibility.Hidden
e.Handled = True
End Sub
Pileggi
Griffitshs: Merci! J'ai utilisé le curseur .ani mais votre réponse est très intéressante! – lamarmora