2011-04-04 217 views
8

我有一个包含日历控件和按钮的TabItem。问题是,当日历的选定日期与先前选择的日期相同时,该按钮需要两次点击来触发其Click事件。WPF按钮需要点击两次点击事件

我已经实现日历的selectedDatesChanged事件来解决这个问题,当前选择的日期不同于以前的选择。代码如下:

selectedDatesChanged(object sender, SelectionChangedEventArgs e) 
{ 
    this.CaptureMouse(); 
    this.ReleaseMouseCapture(); 
} 

我正在寻找一种方法以在上述功能所示,当日历的selectedDate不会从先前选定的日期不同,相同的效果。 我试着处理GotFocus和MouseUp事件,但它不能解决问题。

有没有人有任何想法如何解决这个问题?

感谢, 纳文

+0

我通过处理日历的PreviewMouseUp事件来解决问题。 – naveen 2011-04-04 19:28:08

+3

如果您的问题得到解决,会建议您发布解决方案作为答案,然后接受它。具有类似问题的用户将看到一个被接受的答案,而不是一个解决方案的评论。 – publicgk 2011-04-05 10:22:36

+0

这仍然是日历控件的问题。在任何时候你都要关注它,你需要点击两次其他控件才能得到回应。任何人都得到了很好的解决 – MikeKulls 2011-06-21 05:04:22

回答

12

这个问题是最好的答案,我在网上找到。它仍然不是完美的,因为它没有帮助标记为IsDefault或IsCancel的按钮

protected override void OnPreviewMouseUp(MouseButtonEventArgs e) 
{ 
    base.OnPreviewMouseUp(e); 
    if (Mouse.Captured is Calendar || Mouse.Captured is System.Windows.Controls.Primitives.CalendarItem) 
    { 
    Mouse.Capture(null); 
    } 
} 
+0

原始来源似乎在这里:http://social.msdn.microsoft.com/Forums/vstudio/en-US/b4413872-59d0-4a06-9d20-8d21de126dc6/calendar-not-losing-focus-wpf-40 ?论坛= WPF – SepehrM 2014-07-23 17:34:10

6

你可以简单地写:

Mouse.Capture(null); 

这将解决鼠标持有焦点