WPF列表框拖放;drop会干扰ContextMenu吗?
我正在从列表框中实现拖放,但是我在窗口的其他地方看到了ContextMenu的一些奇怪行为。如果打开关联菜单,然后从列表框开始拖动,关联菜单将关闭,但在执行另一次拖动之前不会再次打开 这有意义吗?有人知道会发生什么吗WPF列表框拖放;drop会干扰ContextMenu吗?,wpf,listbox,drag-and-drop,contextmenu,Wpf,Listbox,Drag And Drop,Contextmenu,我正在从列表框中实现拖放,但是我在窗口的其他地方看到了ContextMenu的一些奇怪行为。如果打开关联菜单,然后从列表框开始拖动,关联菜单将关闭,但在执行另一次拖动之前不会再次打开 这有意义吗?有人知道会发生什么吗 <ListBox Grid.Row="0" ItemsSource="{Binding SourceItems}" MultiSelectListboxDragDrop:ListBoxExtension.SelectedItemsSource="{Binding Select
<ListBox Grid.Row="0" ItemsSource="{Binding SourceItems}" MultiSelectListboxDragDrop:ListBoxExtension.SelectedItemsSource="{Binding SelectedItems}" SelectionMode="Multiple" PreviewMouseLeftButtonDown="HandleLeftButtonDown" PreviewMouseLeftButtonUp="HandleLeftButtonUp" PreviewMouseMove="HandleMouseMove"/>
<ListBox Grid.Row="1" ItemsSource="{Binding DestinationItems}" AllowDrop="True" Drop="DropOnToDestination" />
<Button Grid.Row="2">
<Button.ContextMenu>
<ContextMenu x:Name="theContextMenu">
<MenuItem Header="context 1"/>
<MenuItem Header="context 2"/>
<MenuItem Header="context 3"/>
</ContextMenu>
</Button.ContextMenu>
Button with context menu
</Button>
这似乎和抓老鼠有关 拖动过程中正常的事件顺序如下所示
PreviewMouseLeftButtonDown
处理程序被调用并
ListBox.IsMouseCaptureWithin
is
错PreviewMouseMove
处理程序
有人打电话来。这时
ListBox.IsMouseCaptureWithin
为truePreviewMouseMove
处理程序中
DragDrop.DoDragDrop
被调用并
在这期间的某个时候,鼠标
捕获将从列表框中释放PreviewMouseLeftButtonDown
处理程序被调用并
ListBox.IsMouseCaptureWithin
is
错PreviewMouseMove
处理程序获取
打电话。但这次
ListBox.IsMouseCaptureWithin
is
还是假的PreviewMouseMove
处理程序
ListBox然后获取鼠标捕获
(ListBox.IsMouseCaptureWithin
变为现实)PreviewMouseLeftButtonDown
处理程序的开头似乎有帮助,因为它吞下了关闭该上下文菜单的单击,而不是尝试从中开始拖动
if (!contextMenuCloseComplete)
{
sourceElement.CaptureMouse();
return;
}
…在上下文菜单的Closed
和Opened
事件的处理程序中设置contextMenuCloseComplete
bool
这有意义吗?有人知道这种捕捉老鼠的行为是从哪里来的吗
if (!contextMenuCloseComplete)
{
sourceElement.CaptureMouse();
return;
}