【问题标题】:Messagebox Popup to Confirm Datepicker Issue确认日期选择器问题的消息框弹出窗口
【发布时间】:2010-03-11 03:48:08
【问题描述】:

我在 Silverlight 2 中使用香草日期选择器。我将选定的日期绑定到一个值,当该值更改时,我会弹出一个消息框以确认他们想要更改该值。

但是,当我在日期选择器的值更改后立即使用消息框时,会出现奇怪的行为。日期选择器的弹出窗口不会关闭,如果您将鼠标悬停在日历上,它将选择一个日期,而无需单击鼠标。

此外,发生这种情况后,它似乎会影响绑定,并且在重新加载页面之前无法再次设置视图模型的属性。

这个问题比较具体,所以我附上了一个精简的例子。选择一个日期并按 OK,然后将鼠标移到日历上以重现此内容。

我的 XAML -

<Grid x:Name="LayoutRoot">
    <controls:DatePicker x:Name="dpTest" 
                         Height="25" 
                         Width="75" 
                         SelectedDateChanged="DatePicker_SelectedDateChanged" />
</Grid>

我背后的代码 -

  Private Sub DatePicker_SelectedDateChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs)
    MessageBox.Show("Test Popup")
End Sub

有什么想法或解决方法吗?

【问题讨论】:

    标签: silverlight data-binding datepicker silverlight-2.0 messagebox


    【解决方案1】:

    嗯,这实际上并不少见。我的一位同事最近在 Windows 窗体应用程序中遇到了非常奇怪的问题,因为他使用 MessageBox 来响应第三方菜单控件的单击事件(在菜单被关闭之前)。

    一个对他不起作用但可能对您非常有用的建议是将呼叫“推送”到调度员。这样,您的 SelectedDateChanged 处理程序将在 消息框实际显示之前返回。

    Private Sub DatePicker_SelectedDateChanged( ... )
    
        ' Unfortunately my VB is rusty '
        ' I believe this is the correct syntax. '
        Dispatcher.BeginInvoke(AddressOf ShowDateMessage)
    
        ' At this point, the message box has *not* been shown '
        ' It will be shown once control returns to the dispatcher '
    
    End Sub
    
    Private Sub ShowDateMessage()
    
        ' By this point, the DatePicker popup should be closed '
        ' so hopefully the issues you are seeing would be avoided '
        MessageBox.Show("Test Popup")
    
    End Sub
    

    有几点需要牢记:

    • MessageBox.Show 在 Silverlight 中是独一无二的,因为它是创建模式对话框的唯一方法之一。与消息循环仍在运行的 Windows 窗体不同,Silverlight 的 UI 线程在返回之前会停止。
    • 事件已在日期更改后发生,因此这不是确认更改的好方法。粗略浏览一下文档表明没有相应的“Changing”事件。
    • 根据具体情况,使用 ChildWindow 而不是 MessageBox 可能会更好。这不会有您描述的问题,因为虽然它看起来是一个模态对话框,但它不是。

    【讨论】:

    • 您以上两个建议的结合让我有所收获。如果您将 MessageBox 调用推送到调度程序,这并不能解决问题。如果您弹出一个类似于此博客描述的子窗口 - wintellect.com/CS/blogs/jprosise/archive/2009/04/29/… 您会发现您将遇到类似弹出 MessageBox 的问题。然而!如果您将子窗口弹出到调度程序上,一切都很好。感谢您的帮助。
    【解决方案2】:

    我在博客上写了一个解决方法HERE,通过更改工作流程使消息框变得不必要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多