gpt4 book ai didi

WPF 从具有 SelectionMode=Extended 的 ListBox 拖放

转载 作者:行者123 更新时间:2023-12-04 14:06:30 39 4
gpt4 key购买 nike

我有一个 ListBox 并希望扩展选择模式。我还想实现拖放功能。现在的问题是,如果鼠标点击所选项目,它将立即被选择为单选,而不是等待鼠标向上事件来执行此操作。

由于这种行为,用户几乎不可能开始拖动多个项目,因为他总是点击选择开始拖动,选择更改为鼠标下方的项目并开始对该项目的拖动操作。

这个问题有没有好的解决方法,或者是否存在官方解决方案?

最佳答案

这就是我所做的。在您的 DragDrop 代码中,订阅 PreviewMouseLeftButtonDown .如果您已经点击的项目被选中,则设置 e.已处理 为真。

在下面的示例中,我将列表框项目的一部分标识为拖动夹点(带有凸起),以便我可以区分该项目和拖动表面。我只需要获取列表框项目数据模板和拖放行为,就可以就拖动 handle 元素的名称达成一致。

我正在进行的工作中的 PreviewMouseLeftButtonDown:

private void ItemsControl_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
dragStartPoint = e.GetPosition(null);

ItemsControl itemsControl = this.AssociatedObject as ItemsControl;
if (itemsControl != null)
{
this.sourceItemContainer = itemsControl.ContainerFromElement((Visual)e.OriginalSource) as FrameworkElement;
}

// If this is an multiple or extended selection list box, and on a drag grip, then ensure the item being hit is selected
// This prevents the ItemsControl from using this MouseDown to change selection, except over a selected item's drag grip.
if ((this.IsMultipleSelectionListBox() == true) && (this.IsOriginalSourceDragGrip(e) != false) && (this.IsSourceListBoxItemSelected() == true))
{
e.Handled = true;
}
}

关于WPF 从具有 SelectionMode=Extended 的 ListBox 拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3767708/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com