3

我会尽力解释我的问题:

首先我想要一个只显示月份的日历,我做到了

<Calendar x:Name="_Calendar" DisplayMode="Year" DisplayModeChanged="_Calendar_DisplayModeChanged" DisplayDateChanged="_Calendar_DisplayDateChanged"/>

然后当 DisplayModeChanged 触发时,我简单地这样做:

private void _Calendar_DisplayModeChanged(Object InSender, CalendarModeChangedEventArgs InE)
        {
            if (_Calendar.DisplayMode != CalendarMode.Year)
            {
                _Calendar.DisplayMode = CalendarMode.Year;
            }
        }

一切都很好,直到我想在用户更改所选月份时刷新网格上的数据,例如:

private void _Calendar_DisplayDateChanged(Object InSender, CalendarDateChangedEventArgs InE)
        {
                _RefreshGrid();
        }

第一次(我的意思是在用户与日历交互之前),网格刷新正常,如果用户将鼠标悬停在其他月份上,则没有任何反应(我想要这个)。但是在用户单击另一个月份后,网格再次刷新确定,但是当用户将鼠标悬停在其他月份时,网格再次刷新,我希望网格仅在用户单击其他月份时刷新。

因此,当用户悬停时会触发 DisplayDateChanged ...

这很奇怪,因为如果我在 _RefreshGrid() 中放置一个消息框,则悬停不会触发 DisplayDateChanged。

希望你能理解,如果不是我可以尝试更好地解释。

谢谢!!

编辑:我认为问题出在焦点上,消息框不会发生错误,因为消息框获得焦点,当我单击任何日期时,如果我将鼠标悬停在其他日期上,则触发 DisplayDateChanged,但是如果我首先单击另一个地方不要有这个问题。

4

1 回答 1

4

这解决了我的问题:

 private void _Calendar_PreviewMouseUp(object sender, MouseButtonEventArgs e)
            {
                if (Mouse.Captured is CalendarItem)
                {
                    Mouse.Capture(null);
                }
            }
于 2012-06-06T16:35:06.567 回答