Pregunta

Estoy utilizando el selector de fechas vainilla en Silverlight 2. Ato la fecha seleccionada en un valor, y cuando que los cambios de valor que hacen estallar un cuadro de mensaje para confirmar que les gustaría cambiar el valor.

Sin embargo el comportamiento extraño se produce cuando se utiliza un cuadro de mensaje inmediatamente después se cambia el valor del selector de fechas. emergente del selector de fecha no se cerrará, y si pasa el ratón sobre el calendario que se elija una fecha sin tener que hacer clic en el ratón.

Además, después de esto ocurre, parece afectar fijaciones y no se puede establecer la propiedad del modelo de vista otra vez hasta que se vuelve a cargar la página.

Este problema es más bien específico para He adjuntado un ejemplo simplificada. Elige una fecha y pulse OK a continuación, pasar el puntero del ratón sobre el calendario para reproducir este.

Mi XAML -

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

Mi código detrás -

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

Todas las ideas o soluciones?

¿Fue útil?

Solución

Hmm esto no es del todo infrecuente en realidad. Un compañero de trabajo mío publicó recientemente en cuestiones muy extrañas en una aplicación de Windows Forms, ya que estaba usando de mensaje en respuesta al evento click de un tercio de control de menú de la fiesta (antes del menú había sido despedido.)

Una sugerencia que no funcionó para él, pero puede muy bien trabajar para usted es "empujar" la llamada al despachador. De esa manera su manejador SelectedDateChanged volverá antes el cuadro de mensaje que realmente se muestra.

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

Un par de cosas a tener en cuenta, sin embargo:

  • MessageBox.Show es único en Silverlight, ya que es una de las únicas maneras de crear un diálogo modal. Y a diferencia de las formas de Windows en el que el bucle de mensajes sigue en funcionamiento, el hilo de interfaz de usuario de Silverlight se estancó hasta que vuelve.
  • El evento ya tiene lugar después de la fecha ha cambiado así que esto no es una buena manera de confirmar el cambio. Un rápido vistazo a la documentación sugiere que no hay un correspondiente "Cambio" del evento.
  • En función de las circunstancias, podría ser mejor usar un ChildWindow en lugar de cuadro de mensaje. Esto no tendría los problemas que ha descrito ya que si bien parece ser un diálogo modal, no lo es.

Otros consejos

blogged una solución AQUÍ hacer que el cuadro de mensaje innecesaria cambiando el flujo de trabajo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top