c# - WPF "Calendar only month"在悬停时触发 DisplayDateChanged

标签 c# wpf calendar

我会尽力解释我的问题:

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

<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/

相关文章:

c# - 在 WebService 中找不到 Windows Azure 管理证书

c# - VS 调试并观察变量的变化

wpf - 当我在 Treeview 项目中使用它时,内容绑定(bind)不适用于文本 block

java - 无法在 Java.util.Calendar 中设置月份

iphone - NIslamicCalendar 和 NIslamicCivilCalendar

c# - 如何在C#中保存电子邮件附件

c# - 解决实现相同接口(interface)的泛型类型时的 Autofac 问题,需要 Resolve() 两次或更多次

c# - Session.Clear 后的 Nhibernate LazyInitializationException

c# - WPF Metro 窗口全屏

css - 从 Angular 日历的 tr/td 中删除鼠标悬停效果