2012-06-13 13 views
14

WPF uygulamam başladığında gerçekleşmek istediğim temel olaylar. Bu, Word'ün makinemde nasıl başladığına çok benziyor.WPF uygulamasının başlatılması sırasında bekle imlecini nasıl görüntülerim?

  1. Ekran meşgul imleç.
  2. temel başlatma gerçekleştirin. Bu işlem birkaç saniye sürüyor ve açılış ekranı görüntülenmeden önce yapılması gerekiyor.
  3. Görüntü giriş ekranı. Bu açılış ekranı, daha derinlemesine başlatmaya ilerlemeyi gösterir ve bir süre alabilir (veritabanından alınan bilgileri önbelleğe alır).
  4. Varsayılan imleci göster. Sıçrama ekranı şimdi ilerleme gösterdiğinden, meşgul bir imleci görüntülemeye gerek yoktur. giriş ekranı ilerleme tamamlandıktan sonra
  5. , ana penceresini görüntüler.
  6. Sıçrama ekranını kapatın.

Her şey, görüntülenen açılış ekranından önce meşgul imlecin görüntülenmesi dışında iyi çalışır. Uygulamayı bir kısayol aracılığıyla yürüttüğümde, bekleme imleci yanıp söner, ancak kısa bir süre sonra varsayılana geri döner. İmleç ayarlamak için farklı yollar denedim ama hiçbiri işe yaramadı, ama sorun şu ki ben bir denetim/pencere içinde değilim - App.xaml.cs içinde yapıyorum. Ve, belirlediğim özellikler Windows Forms özellikleri gibi görünüyor. İşte App.xaml.cs'deki kodumdan bir alıntıdır.

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(); 
} 

cevap

38

Bu değil System.Windows.Forms

Mouse.OverrideCursor = System.Windows.Input.Cursors.Wait; 

kullanın System.Windows.Input çalışmalıdır.

+0

Eklendi o ve hala eskisi gibi davranır. Başlangıçta ayarladıktan sonra OverrideCursor'ı sıfırlamazsam, imleci pencerenin üzerine getirdiğimde bekle imleci görüntülenir. Ancak, uygulama başlangıçta başladığında gösterilmez. – bsh152s

+0

Hmm, bir süredir onunla oynuyordum, imleci gerçek pencerenin dışında değiştirmek imkansız değilse çok zor görünüyor (bu kodla bile fark edersiniz. pencere). Üzgünüm daha fazla yardım edemedim. –

+0

Bu güzel. Eğer sadece bir kontrolün üzerine geldiyseniz, imleciniz değil, imleciniz olsun, this.Cursor değeri sadece Pencere için değişir. Mouse.OverrideCursor, Pencere ve bunun içindeki her şey için bekle imlecini ayarlamış gibi görünüyor. –

18

zaman önemli miktarda alan bir görev var ve uygulama imleci değiştirmek için bu kodu kullanabilirsiniz (iyi bir fikir olan) olmayan bir GUI iş parçacığı üzerinde çalışıyorsa:

Application.Current.Dispatcher.Invoke(() => 
{ 
    Mouse.OverrideCursor = Cursors.Wait; 
}); 
meşgul işlemi tamamlanırken

, bunu kullanın:

Application.Current.Dispatcher.Invoke(() => 
{ 
    Mouse.OverrideCursor = null; 
}); 
2

Ben Initialize (varsayarak) evet, yoğun imleç görünmesini istediğiniz parçasıdır?

Eğer öyleyse, aşağıdaki yaklaşım deneyin:

  1. sizin MainWindow.xaml yılında <Window> elemana, aşağıdaki özellikleri ayarlayın: Visibility="Hidden" ve Cursor="Wait". Initialize() çağrısında bağlı herhangi bir kod idam almaz böylece MainWindow.xaml.cs ise
  2. , yapıcı dışına ve bir kamu Initialize() yöntem haline başlatma kodu taşıyın. emin Initialize() yönteminin son Visible için Visiblity özelliğini ayarlar ve hem Cursor sıfırlar olun.Kod parçacığı aşağıdaki gibi bir şey için yukarıda yayınlanan
  3. Güncelleme:
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. 
} 
0
 Mouse.OverrideCursor = System.Windows.Input.Cursors.Wait; 
     InitializeComponent(); 
     ... 
     Mouse.OverrideCursor = null; 
İlgili konular