早些时候我问how to cancel a WPF TreeViewItem.Selected event。
回答者建议我在选择发生之前处理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
这只是一种工作......
如果有未保存的更改,那么我会看到MessageBox ...
如果我选择取消,它会取消。
但是,如果我改为选择“确定”以丢弃未保存的更改,则无论如何它都会取消 - 即使e.Handled = False。它不会继续并执行TreeViewThings_Selected()。
我认为有一个MessageBox以某种方式将其搞砸了。
我做错了什么?
答案 0 :(得分:1)
问题是消息框导致树失去焦点。消息框解除后,您是否尝试将焦点设置回树?