私はツリービューを持っています。TreeViewItems に ContextMenu を設定しました。アイテムを右クリックして ContextMenu を開き、(ContextMenu が開いているときに) 別のアイテムを選択すると、クリックしたばかりのアイテムが何もせずに選択されることが期待されます。代わりに、フレームワークは、ContextMenu が開かれたアイテムをドラッグしたいと考えているため、Drop ハンドラーを呼び出します。どうすればこの問題を解決できますか。ありがとう
private void TreeViewPreviewMouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed && !_isDragging)
{
var position = e.GetPosition(sender as IInputElement);
if (Math.Abs(position.X - _startPoint.X) > SystemParameters.MinimumHorizontalDragDistance ||
Math.Abs(position.Y - _startPoint.Y) > SystemParameters.MinimumVerticalDragDistance)
{
StartDrag();
}
}
}
private void TreeViewPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
_startPoint = e.GetPosition(sender as IInputElement);
}
private void TemplateTreeViewDrop(object sender, DragEventArgs e)
{
if (_isDragging && (e.Source as TreeView) != null)
{
dragQuestion = e.Data.GetData(typeof(QuestionListItem)) as QuestionListItem;
dropQuestion = GetItemAtLocation(e.GetPosition(TemplateTreeView));
if (dragQuestion != null && dropQuestion != null && dragQuestion!=dropQuestion)
{
viewModel.MoveQuestion(dragQuestion, dropQuestion);
}
}
e.Handled = true;
dragQuestion = null;
}
private void StartDrag()
{
var temp = TemplateTreeView.SelectedItem as QuestionListItem;
if(temp == null) return;
_isDragging = true;
var data = new DataObject(temp);
DragDrop.DoDragDrop(TemplateTreeView, data, DragDropEffects.Move);
_isDragging = false;
}