前に、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 があるという事実は、どういうわけかそれを台無しにすると思います。
私は何を間違っていますか?