2
早些時候我問了how to cancel a WPF TreeViewItem.Selected event。如何正確處理帶有MessageBox確認的PreviewMouseDown事件?
的應答者建議我,而不是處理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
這只是排序的工作...
- 如果沒有未保存的變化,那麼它只進行fin e並執行TreeViewThings_Selected()。
如果有未保存的更改,然後我看到的MessageBox ...
如果我當時選擇取消,它取消。
但是,如果我不是選擇確定放棄我的未保存的更改,那麼它只是取消反正 - 即使e.Handled =假。它不會繼續並執行TreeViewThings_Selected()。
我想事實上有一個MessageBox以某種方式將其擰緊。
我在做什麼錯?
有您通過預覽按下鼠標在調試器處理程序踩,看它是否正在工作,你的預期?你應該能夠看到e.Handled是否被設置爲真/假和何時。如果是,你知道盒子有問題。 – 2009-02-13 12:57:00