【问题标题】:how can I know how a popup menu was closed?我怎么知道弹出菜单是如何关闭的?
【发布时间】:2012-09-19 15:08:08
【问题描述】:

我有一个 WPF DatePicker,与任何日期选择器一样,它有一个内置日历,您可以通过单击小日历图标来打开它。

这个日历被放在一个弹出菜单中,所以它的行为就像一个,即:一旦它被打开,有两种方法可以关闭它:

  • 验证您的选择(用鼠标单击日期,点击“Enter”并突出显示日期等...)
  • 取消(点击“Echap”,在弹出窗口外点击等...)

我的问题是,我需要知道使用了哪一个,但我似乎找不到方法。

现在我在听“CalendarClosedEvent”,但它没有告诉我日历是如何关闭的

我还使用了“PreviewKeyDownEvent”来捕获“Echap”键,效果很好,只是它没有涵盖用户在日历之外单击以关闭它的情况。

有没有办法做到这一点?如果有,是什么?

(注意:对于弹出菜单对象而不是 datePicker 中的日历对象的通用答案,我会很高兴)

【问题讨论】:

    标签: wpf event-handling calendar datepicker


    【解决方案1】:

    至少对于 DatePicker,您可以将 SelectedDate 设置为 null(这实际上是默认设置,因此请保留它)。然后,只要用户在控件内单击,就会触发 SelectedDateChanged。

    这是我能找到的唯一可以标记差异的东西。希望对您有所帮助。

    【讨论】:

    • 其实,我之所以想知道如何日历是关闭的,是因为我想将显示日期重置为之前的值(以我自己的格式),如果它已“取消”,因此您的解决方案不适用于我的情况。
    • 嗯,应该的。 DisplayDate 和 SelectedDate 是不同的属性。当 SelectedDate 更改时设置一个“clickedFalg”。然后,在 CalendarClosed 事件中检查标志。如果用户单击控件,则让处理发生。如果他们单击了控件 - 将 SelectedDate 设置回 null 并将 DisplayDate 设置为以前的值。我没有发现问题。
    • 不,它不起作用,原因如下:假设我从一个空框开始:DisplayDate = ""。然后我打开日历。默认 SelectedDate 设置为 DateTime.Today(或 null,但不会影响以下内容:)。然后,我使用箭头键突出显示另一个日期。 SelectedDate 更改为这个新日期(因此您的标志将是“true”),然后我点击“echap”。使用您的解决方案,我的 DisplayDate 将是最后一个 selectedDate,而不是“”。这正是实际上给我带来了麻烦^^
    • 废话!你说得对。现在你毁了我打算用它做的:)。好吧,回到绘图板。
    • 我们如何再添加一个事件处理程序 - KeyDown。检查 e.Key,如果是 Escape,则将 clickedFalg 设置回 false。到目前为止,在我的测试中,这就像一个冠军。仍然不能原谅框架中缺少通知标志。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多