Проблема в том, что окно сообщений приводит к тому, что ваше дерево теряет фокус. Вы пытались установить фокус обратно на дерево после закрытия окна сообщения?
е я спрашивалакак отменить событие WPF TreeViewItem.Selected.
Ответчики предложили вместо этого обработать событие PreviewMouseDown еще до того, как выбор произойдет. Это имеет смысл.
Я пытался сделать это ...
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
Это всего лишь вид работы ...
Если несохраненных изменений нет, то все идет нормально и выполняет TreeViewThings_Selected ().Если есть несохраненные изменения, то я вижу MessageBox ...
Если я затем выберу Отмена, он отменяется.
Однако, если я вместо этого выберу OK, чтобы отменить мои несохраненные изменения, он все равно просто отменится, даже если e.Handled = False. Он не продолжается и выполняет TreeViewThings_Selected ().
Я думаю, что тот факт, что есть MessageBox, как-то облажался.
Что я делаю неправильно?