前に、WPF TreeViewItem.Selected イベントをキャンセルする方法を尋ねました。
回答者は、代わりに、選択が行われる前に PreviewMouseDown イベントを処理することを提案しました。それは理にかなっている。
私はそれをやろうとしました...
XAML...
<TreeView Name="TreeViewThings"
...
PreviewMouseDown="TreeViewThings_PreviewMouseDown"
TreeViewItem.Expanded="TreeViewThings_Expanded"
TreeViewItem.Selected="TreeViewThings_Selected" >
ビジュアルベーシック...
サブ TreeViewThings_PreviewMouseDown(...)
If UnsavedChangesExist() その後
e.Handled = UserCancelled()
そうしないと
e.Handled = False
終了条件
サブ終了
関数 UnsavedChangesExist() をブール値として
...
終了機能
関数 UserCancelled() をブール値として
Return MessageBox.Show("未保存の変更を破棄しますか?", _
"保存されていない変更", _
MessageBoxButton.OKCancel、_
MessageBoxImage.Question) = MessageBoxResult.Cancel
終了機能
これは一種の作業です...
- 保存されていない変更がない場合は、問題なく続行され、TreeViewThings_Selected() が実行されます。
保存されていない変更がある場合、MessageBox が表示されます...
MessageBox: 続行して未保存の変更を破棄しますか? OK/キャンセル http://img25.imageshack.us/img25/141/discard2yk0.gif
次にキャンセルを選択すると、キャンセルされます。
ただし、代わりに [OK] を選択して未保存の変更を破棄すると、e.Handled = False であってもキャンセルされます。続行して TreeViewThings_Selected() を実行しません。
MessageBox があるという事実は、どういうわけかそれを台無しにすると思います。
私は何を間違っていますか?