我会尽力解释我的问题:
首先我想要一个只显示月份的日历,我做到了
<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();
}
第一次(我的意思是在用户与日历交互之前),网格刷新正常,如果用户将鼠标悬停在其他月份上,则没有任何反应(我想要这个)。但是在用户点击另一个月份后,网格再次刷新 OK,但是当用户将鼠标悬停在其他月份时,网格再次刷新,我希望仅当用户点击其他月份时才刷新网格。
因此当用户悬停时会触发 DisplayDateChanged...
这很奇怪,因为如果我在 _RefreshGrid() 中放置一个消息框,那么悬停不会触发 DisplayDateChanged。
希望你能看懂,如果看不懂我会试着解释得更好。
谢谢!!
编辑:我认为问题出在焦点上,错误不会发生在消息框上,因为消息框获得了焦点,当我单击任何日期时,如果我将鼠标悬停在其他日期上,则会触发 DisplayDateChanged,但如果我单击另一个放在第一位没有这个问题。
最佳答案
这解决了我的问题:
private void _Calendar_PreviewMouseUp(object sender, MouseButtonEventArgs e)
{
if (Mouse.Captured is CalendarItem)
{
Mouse.Capture(null);
}
}
关于c# - WPF "Calendar only month"在悬停时触发 DisplayDateChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10887999/