gpt4 book ai didi

wpf - 使用列表框拖动选择

转载 作者:行者123 更新时间:2023-12-02 22:09:07 26 4
gpt4 key购买 nike

我在 WPF 中有一个 ListView 的简单实现,它允许我通过按住鼠标按钮并在项目上拖动来选择列表中的多个项目。但是,按住鼠标按钮时,当我将鼠标移到 ListView 之外时,选择会发生奇怪的情况。理想情况下,我只希望选择保持不变,但它会快速循环所有选定的项目,只留下最后一个选定的项目。

这是代码,有什么想法吗?

public class MultiSelectListView : ListView
{
private bool m_isSelectionActive;

public bool IsSelectionActive
{
get { return m_isSelectionActive; }
}

protected override DependencyObject GetContainerForItemOverride()
{
return new MultiSelectListViewItem(this);
}

protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)
{
m_isSelectionActive = true;
}

protected override void OnPreviewMouseLeftButtonUp(MouseButtonEventArgs e)
{
m_isSelectionActive = false;
}
}

public class MultiSelectListViewItem : ListViewItem
{
private readonly MultiSelectListView m_parent;

public MultiSelectListViewItem(MultiSelectListView parent)
{
m_parent = parent;
}

protected override void OnMouseEnter(System.Windows.Input.MouseEventArgs e)
{
if (m_parent.IsSelectionActive)
IsSelected = true;
}
}

最佳答案

当鼠标“拖动”到列表顶部上方或列表底部下方时,您会遇到这种奇怪的情况。我认为您设置的行为只有在选择模式为“多重”时才能正常工作。下面对 MultiSelectListView 的修改将默认选择模式设置为“多个”,并假设用户希望通过单击鼠标左键开始另一个选择。如果在 XAML 中将 SelectionMode 设置为 Extended 或 Single,您仍然会体验到时髦的感觉。

public class MultiSelectListView : ListView
{
private bool m_isSelectionActive;
public bool IsSelectionActive
{
get
{
return m_isSelectionActive;
}
}
protected override DependencyObject GetContainerForItemOverride()
{
return new MultiSelectListViewItem(this);
}
protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)
{
if (SelectionMode != SelectionMode.Single)
{
SelectedItems.Clear();
}
m_isSelectionActive = true;
}
protected override void OnPreviewMouseLeftButtonUp(MouseButtonEventArgs e)
{
m_isSelectionActive = false;
}
public MultiSelectListView() : base()
{
SelectionMode = SelectionMode.Multiple;
}
}

关于wpf - 使用列表框拖动选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6364029/

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