2010-03-11 6 views
28

Ich verwende den WPF-Kalender, der Teil des WPF-Toolkits ist.WPF-Toolkit-Kalender benötigt zwei Klicks, um den Fokus zu erhalten

Ich habe zwei verschiedene Kalender auf einem Steuerelement. Wenn ich versuche, ein Datum aus einem Kalender und dann aus dem zweiten Kalender auszuwählen, muss ich zweimal auf den zweiten Kalender klicken, um ein Datum auszuwählen.

Hat jemand anderes dieses Problem und weiß von einer Lösung?

+0

Hmm, ich nie Kalender verhalten zu weirdly bemerkt, aber ich habe es nicht zu viel verwendet, und möglicherweise nicht in der gleichen Situation wie Sie. Das heißt, die WPF-Toolkit-Steuerelemente sind nicht wirklich perfekt, daher ist dieses Problem absolut glaubwürdig. –

+6

FYI, ich habe dieses Problem mit dem WPF-Kalender innerhalb von .NET Framework 4.0 ebenfalls. – Luke

Antwort

34

Der Kalender kann die Maus ohne Datumswechsel erfassen (zum Beispiel in CalendarMode Drill-Down). Eine bessere Lösung ist dies:

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

Dies ist eine bessere Lösung. Ich mag es .... – timothymcgrath

+0

Dies behebt ein Problem für mich, wo der ausgewählte Datumsbereich verloren ging, als ein anderes Steuerelement das Mouse-Up-Ereignis erhielt. – mjcopple

+1

Ich empfehle eine erweiterte Version dieses Codes http://stackoverflow.com/questions/5543119/wpf-button-takes-two-clicks-to-fire-click-event –

4

Ich habe diesen Code hinzugefügt, als ich die SelectedDates des Kalenders änderte und das Problem behoben wurde.

 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

Die Me.DisplayDate-Zeile dient lediglich dazu, die Ansicht in das SelectedDate zu verschieben. Dies ist für den Fix nicht erforderlich. – timothymcgrath

+0

Diese Arbeit für mich, Vielen Dank für Ihre Lösung. (C#) – Jirapong

+0

Vielen Dank! Dies behebt das Problem für mich, wenn Sie das .NET Framework 4.0-Kalendersteuerelement verwenden. Es scheint, dass der Fehler bis zur aktuellen endgültigen Version von .NET 4.0 beibehalten wurde. – Luke

Verwandte Themen