Bei einigen meiner Benutzersteuerungen ändere ich den Cursor mithilfe von
this.Cursor = Cursors.Wait;
wenn ich auf etwas klicke.
Jetzt möchte ich dasselbe auf einer WPF-Seite mit einem Klick auf eine Schaltfläche tun. Wenn ich mit der Maus über meine Schaltfläche fahre, ändert sich der Cursor in eine Hand, aber wenn ich darauf klicke, ändert er sich nicht in den Wartecursor. Ich frage mich, ob dies etwas mit der Tatsache zu tun hat, dass es sich um eine Schaltfläche handelt, oder weil dies eine Seite und keine Benutzersteuerung ist. Dies scheint ein seltsames Verhalten zu sein.
Eine Möglichkeit, dies in unserer Anwendung zu tun, besteht darin, IDisposable und dann
using(){}
Blöcke zu verwenden, um sicherzustellen, dass der Cursor nach Abschluss zurückgesetzt wird.und dann in Ihrem Code:
Die Überschreibung endet, wenn entweder: das Ende der using-Anweisung erreicht ist oder; Wenn eine Ausnahme ausgelöst wird und das Steuerelement den Anweisungsblock vor dem Ende der Anweisung verlässt.
Aktualisieren
Um ein Flackern des Cursors zu verhindern, haben Sie folgende Möglichkeiten:
quelle
Mouse.OverrideCursor
, istnull
es nicht gesetzt und überschreibt den Systemcursor nicht mehr. Wenn ich den aktuellen Cursor direkt geändert habe (dh nicht überschrieben habe), liegt möglicherweise ein Problem vor.ConcurrentStack<Cursor>
die obige Antwort bearbeiten oder Ihre eigene hinzufügen.Sie können einen Datenauslöser (mit einem Ansichtsmodell) auf der Schaltfläche verwenden, um einen Wartecursor zu aktivieren.
Hier ist der Code aus dem Ansichtsmodell:
quelle
Wenn Ihre Anwendung asynchrones Material verwendet und Sie mit dem Mauszeiger herumspielen, möchten Sie dies wahrscheinlich nur im Haupt-UI-Thread tun. Sie können den Dispatcher-Thread der App dafür verwenden:
quelle
Folgendes hat bei mir funktioniert:
quelle