我正在编写一个MVVM库,它允许显示带有可自定义DataTemplates的自定义上下文菜单。如果我从一个命令(例如,在Button中)显示它,它已经过测试并且运行良好,但是现在我尝试使用InputBindings来显示它以捕获MouseGestures,这样我就可以很容易地将它绑定到一个单击鼠标右键。
代码编写如下:
<DataGrid Margin="274,10,10,10" IsReadOnly="True" AutoGenerateColumns="False" ItemsSource="{Binding ModulosVM.TablasList}" SelectedItem="{Binding ModulosVM.TablaSelected}" Grid.Column="1" MouseUp="DataGrid_MouseUp">
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding="{Binding IsSelected}" Header=""/>
<DataGridTextColumn Binding="{Binding TableName}" Header="Tabla"/>
</DataGrid.Columns>
<DataGrid.InputBindings>
<MouseBinding Gesture="RightClick" Command="{Binding ShowTableMenuCommand}"></MouseBinding>
</DataGrid.InputBindings>
</DataGrid>
问题是,当我右键单击DataGrid的其中一行时,菜单开始显示动画但是如果我在动画完成之前释放鼠标按钮则会隐藏它。如果我按住按钮直到动画结束,那么我可以正常使用它并按预期运行。
如果我从Button调用它,ShowTableMenuCommand工作正常,显示具有典型右键单击上下文菜单的预期行为的上下文菜单(右键单击显示,隐藏菜单项单击)。我想要实现的是即使我松开鼠标按钮也可以使整个菜单显示动画。
有关详细信息,Command执行的操作是触发窗口捕获并运行弹出窗口并显示的事件:
Popup popupMenu = new Popup();
popupMenu.StaysOpen = false;
popupMenu.PopupAnimation = PopupAnimation.None;
popupMenu.PlacementTarget = w;
popupMenu.Placement = PlacementMode.Mouse;
popupMenu.Closed += (o, e) =>
{
popupMenu.IsOpen = false;
vm.Dispose();
};
popupMenu.Child = new PopupMenuPanel(vm);
popupMenu.AllowsTransparency = true;
popupMenu.DataContext = vm;
popupMenu.IsOpen = true;
return popupMenu;
PopupMenuPanel是具有所有自定义设置的自定义控件。我尝试过不同的弹出动画,所有这些都表明了这种行为。实际上,PopupAnimation.None会隐藏菜单,除非我在释放按钮之前检查它。之后,即使我&#34;鼠标离开&#34;菜单仍保持打开状态。它
对此有何评论? 提前谢谢。