2010-03-11 11 views
28

J'utilise le calendrier WPF qui fait partie de la boîte à outils WPF.WPF Toolkit Le calendrier prend deux clics pour obtenir le focus

J'ai deux calendriers différents sur un contrôle. Lorsque je tente de choisir une date à partir d'un calendrier, puis à partir du deuxième calendrier, je dois cliquer deux fois sur le deuxième calendrier pour l'amener à choisir une date.

Est-ce que quelqu'un d'autre a eu ce problème et connaît une solution?

+0

Hmm, je ne remarqué le calendrier se comporter trop bizarrement, mais je ne l'ai pas utilisé trop, et peut-être pas dans la même situation que vous. Cela dit, les contrôles WPF Toolkit ne sont pas vraiment parfaits, donc ce problème est tout à fait crédible. –

+6

FYI, je rencontre également ce problème avec le calendrier WPF dans le .NET Framework 4.0 – Luke

Répondre

34

Le calendrier peut capturer la souris sans changement de date (par exemple, dans l'exploration du calendrier). Une meilleure solution est la suivante:

protected override void OnPreviewMouseUp(MouseButtonEventArgs e) 
{ 
    base.OnPreviewMouseUp(e); 
    if (Mouse.Captured is CalendarItem) 
    { 
     Mouse.Capture(null); 
    } 
} 
+1

Ceci est une meilleure solution. Je l'aime .... – timothymcgrath

+0

Cela m'a corrigé un problème où la plage de dates sélectionnée a été perdue lorsqu'un autre contrôle a reçu l'événement de la souris vers le haut. – mjcopple

+1

Je recommande la version longue de ce code http://stackoverflow.com/questions/5543119/wpf-button-takes-two-clicks-to-fire-click-event –

4

J'ai ajouté ce code lors de la modification des SelectedDates du calendrier et il a corrigé le problème.

 Private Sub Calendar_SelectedDatesChanged(ByVal sender As Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs) Handles Me.SelectedDatesChanged 
     Me.DisplayDate = CType(Me.SelectedDate, DateTime) 

     ' This is to prevent the Calendar DayButtons from holding the focus in the Calendar. 
     Me.CaptureMouse() 
     Me.ReleaseMouseCapture() 
    End Sub 
+0

La ligne Me.DisplayDate est juste pour déplacer la vue à la SelectedDate, ce n'est pas nécessaire pour le correctif. – timothymcgrath

+0

Ce travail pour moi, merci pour votre solution. (C#) – Jirapong

+0

Merci! Cela a résolu le problème pour moi lors de l'utilisation du contrôle Calendar .NET Framework 4.0. Il semble que le bug a persisté jusqu'à la version finale actuelle de .NET 4.0 – Luke