TreeView的选择事件不断向上传递,子节点执行事件后父节点也会触发,这是由于从主窗口窃取了焦点。
为了避免这种情况,我们要做的就是简单地延迟对我们代码的调用,即我们需要在SelectedItemChanged中执行的MyFunction()。这是一种解决方法,它会延迟打开新窗口的调用,直到项目选择代码完成为止。
private delegate void NoArgDelegate();
void Window1_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
Dispatcher.BeginInvoke(DispatcherPriority.Background,
(NoArgDelegate)delegate { MyFunction(); });
}