Voici les événements de base que je souhaite voir se produire au démarrage de mon application WPF. Cela ressemble beaucoup à la façon dont Word démarre sur ma machine.
Tout fonctionne bien sauf l'affichage du curseur occupé avant l'affichage de l'écran de démarrage. Lorsque j'exécute l'application via un raccourci, le curseur d'attente clignote, mais revient rapidement à la valeur par défaut. J'ai essayé différentes manières de définir le curseur, mais aucune ne fonctionne, mais je pense que le problème est que je ne suis pas dans un contrôle/une fenêtre - je le fais depuis App.xaml.cs. De plus, les propriétés que je configure semblent être des propriétés de Windows Forms. Voici un extrait de mon code dans App.xaml.cs.
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
System.Windows.Forms.Application.UseWaitCursor = true;
//System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor;
//System.Windows.Forms.Application.DoEvents();
Initialize();
SplashWindow splash = new SplashWindow();
splash.Show();
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default;
// Right now I'm showing main window right after splash screen but I will eventually wait until splash screen closes.
MainWindow main = new MainWindow();
main.Show();
}
Cela devrait marcher
Mouse.OverrideCursor = System.Windows.Input.Cursors.Wait;
Utilisez System.Windows.Input
pas System.Windows.Forms
.
Si vous avez une tâche qui prend beaucoup de temps et qu'elle s'exécute sur un thread non graphique (ce qui est une bonne idée), vous pouvez utiliser ce code pour modifier le curseur de l'application:
Application.Current.Dispatcher.Invoke(() =>
{
Mouse.OverrideCursor = Cursors.Wait;
});
Lorsque le processus occupé est terminé, utilisez ceci:
Application.Current.Dispatcher.Invoke(() =>
{
Mouse.OverrideCursor = null;
});
Je suppose que Initialize () est la partie pour laquelle vous voulez que votre curseur occupé apparaisse, oui?
Si c'est le cas, essayez l'approche suivante:
<Window>
, définissez les propriétés suivantes: Visibility="Hidden"
et Cursor="Wait"
.Visiblity
sur Visible
et réinitialise également la Cursor
.protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
MainWindow main = new MainWindow();
main.Show(); // this should set the cursor how you want it
Initialize();
SplashWindow splash = new SplashWindow();
splash.Show();
main.Initialize(); // now invoke the Initialize method you created
// Right now I'm showing main window right after splash screen but I will eventually wait until splash screen closes.
}
Mouse.OverrideCursor = System.Windows.Input.Cursors.Wait;
InitializeComponent();
...
Mouse.OverrideCursor = null;