¿Cómo manejo adecuadamente un evento PreviewMouseDown con una confirmación de cuadro de mensaje?
Antes preguntéhow para cancelar un evento WPF TreeViewItem.Selected.
Los respondedores sugirieron que en su lugar maneje el evento PreviewMouseDown antes de que la selección tenga lugar. Eso tiene sentido
He tratado de hacer eso ...
XAML ...
<TreeView Name="TreeViewThings"
...
PreviewMouseDown="TreeViewThings_PreviewMouseDown"
TreeViewItem.Expanded="TreeViewThings_Expanded"
TreeViewItem.Selected="TreeViewThings_Selected" >
Visual Basic ...
Sub TreeViewThings_PreviewMouseDown(...) If UnsavedChangesExist() Then e.Handled = UserCancelled() Else e.Handled = False End If End Sub Function UnsavedChangesExist() As Boolean ... End Function Function UserCancelled() As Boolean Return MessageBox.Show("Discard your unsaved changes?", _ "Unsaved Changes", _ MessageBoxButton.OKCancel, _ MessageBoxImage.Question) = MessageBoxResult.Cancel End Function
Esto es solo una especie de trabajo ...
Si no hay cambios no guardados, entonces funciona bien y ejecuta TreeViewThings_Selected ().Si hay cambios sin guardar, entonces veo el cuadro de mensaje ...
Si luego elijo Cancelar, se cancela.
Sin embargo, si en cambio elijo Aceptar para descartar mis cambios no guardados, simplemente se cancela de todos modos, aunque e.Handled = False. No continúa y ejecuta TreeViewThings_Selected ().
Creo que el hecho de que hay un MessageBox lo arruina de alguna manera.
¿Qué estoy haciendo mal