Sur plusieurs de mes contrôles utilisateur, je change le curseur en utilisant
this.Cursor = Cursors.Wait;
quand je clique sur quelque chose.
Maintenant, je veux faire la même chose sur une page WPF en cliquant sur un bouton. Lorsque je survole mon bouton, le curseur se transforme en main, mais lorsque je clique dessus, il ne se transforme pas en curseur d'attente. Je me demande si cela a quelque chose à voir avec le fait que c'est un bouton, ou parce que c'est une page et non un contrôle utilisateur? Cela semble être un comportement étrange.
Une façon de le faire dans notre application consiste à utiliser IDisposable, puis avec des
using(){}
blocs pour garantir que le curseur est réinitialisé une fois terminé.puis dans votre code:
Le remplacement prendra fin lorsque: la fin de l'instruction using est atteinte ou; si une exception est levée et que le contrôle quitte le bloc d'instructions avant la fin de l'instruction.
Mettre à jour
Pour éviter que le curseur ne scintille, vous pouvez faire:
la source
Mouse.OverrideCursor
ànull
il est hors service et aucun remplacement plus le curseur du système. SI je modifiais directement le curseur actuel (c'est-à-dire sans écraser), il pourrait y avoir un problème.ConcurrentStack<Cursor>
, n'hésitez pas à modifier la réponse ci-dessus ou à ajouter la vôtre.Vous pouvez utiliser un déclencheur de données (avec un modèle de vue) sur le bouton pour activer un curseur d'attente.
Voici le code du modèle de vue:
la source
Si votre application utilise des éléments asynchrones et que vous manipulez le curseur de la souris, vous voudrez probablement le faire uniquement dans le thread d'interface utilisateur principal. Vous pouvez utiliser le thread Dispatcher de l'application pour cela:
la source
Ce qui suit a fonctionné pour moi:
la source