¿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 ...

MessageBox: ¿Continuar y descartar los cambios no guardados? OK / Cancelar http://img25.imageshack.us/img25/141/discard2yk0.gi

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

Respuestas a la pregunta(1)

Su respuesta a la pregunta