2017-08-01 92 views
2

我有一个TreeView,当用户双击一个TreeViewItem时会打开一个新窗口。这个新窗口位于上一个窗口(具有TreeView的窗口)的前面和中间(WindowStartupLocation="CenterOwner")。有时,当这个新窗口打开时,鼠标直接位于新窗口的MenuItem的顶部,并且它导致MenuItem Click事件被触发,这在我的程序中是不受欢迎的。我尝试在TreeView MouseDoubleClick处理程序中将e.Handled设置为true,并没有改变这种行为。双击TreeView导致MenuItem点击新窗口

这里是我的TreeView:

<TreeView x:Name="treeView" MouseDoubleClick="treeView_MouseDoubleClick" ItemsSource="{Binding}"> 
    <TreeView.ItemTemplate> 
     <HierarchicalDataTemplate ItemsSource="{Binding MessageHeaders}" ItemTemplate="{StaticResource childrenDataTemplate}"> 
      <TextBlock Text="{Binding Path=ModuleName}"/> 
     </HierarchicalDataTemplate> 
    </TreeView.ItemTemplate> 
</TreeView> 

而且treeView_MouseDoubleClick:

private void treeView_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
{ 
    if (e.ChangedButton == MouseButton.Left) 
    { 
     e.Handled = true; 
     APIEditorWindow editor = new APIEditorWindow(); 
     editor.Owner = this; 
     editor.Show(); 
    } 
} 

回答

0

如果有Click事件的菜单项只需要一个点击,你可以检查它是否是从触发双击

private void MenuItemClick(object sender, MouseButtonEventArgs e) 
{ 
    if(e.ClickCount == 1) 
    { 
     // your code 
    } 
    // if it was activated from a double click, code will be ignored 
} 

可能会尝试其他建议Preview事件如果上述解决方案不令人满意,则使用e.Handled = true

+0

MenuItem Click事件具有'RoutedEventArgs'作为输入,而不是'MouseButtonEventArgs',它不包含点击计数。我尝试使用'预览'事件,并没有奏效。 – drmr9grl