【问题标题】:Prevent ListView from changing selection when mouse moved with button down当鼠标按下按钮移动时,防止 ListView 更改选择
【发布时间】:2010-11-19 15:39:11
【问题描述】:

我有一个带有扩展选择模式的 ListView。默认情况下,当我按下左键时,它会选择一个项目,当我(缓慢)移动鼠标光标时,它会移动选择(只要按钮仍然按下)。

由于我在列表顶部实现拖放,它变得有点烦人。当鼠标按钮按下时,如何防止它更改所选项目?我尝试在 PreviewMouseMove 中说 e.Handled=true 但没有帮助。

【问题讨论】:

    标签: wpf listview mouseevent


    【解决方案1】:

    更新
    最后一个解决方案不起作用。这是禁用鼠标移动选择的两个事件的组合。问题是,在选择已选择的项目时(出现未选择的选项),那么我们仍然可以向上或向下移动鼠标以更改选择。我发现解决这个问题的唯一方法是欺骗 ListView 再次选择相同的项目。如果您更改了选择功能,这可能会带来不便,但否则这似乎可以完成工作。

    <ListView SelectionMode="Extended"
                Name="listView">
        <ListView.ItemContainerStyle>
            <Style TargetType="{x:Type ListViewItem}">
                <EventSetter Event="Selected" Handler="listViewItem_Selected"/>
                <EventSetter Event="PreviewMouseDown" Handler="listViewItem_PreviewMouseDown"/>
            </Style>
        </ListView.ItemContainerStyle>
    </ListView>
    

    在 EventHandlers 中

    void listViewItem_Selected(object sender, RoutedEventArgs e)
    {
        listView.ReleaseMouseCapture();
    }
    private void listViewItem_PreviewMouseDown(object sender, MouseButtonEventArgs e)
    {
        ListViewItem listViewItem = sender as ListViewItem;
        if (listViewItem.IsSelected == true)
        {
            // Unselecting the item in the Preview event
            // "tricks" the ListView into selecting it again
            listViewItem.IsSelected = false;
        }
    }
    

    【讨论】:

    • 这工作得更好一点,但仍然不是 100%,现在如果我快速移动鼠标,但它仍然会选择它。看起来 SelectionChanged 在 PreviewMouseMove 之前被调用。
    • 你是对的,两次选择相同的项目仍然失败。我尝试打印出每个 ReleaseMouseCapture 并且它确实被调用了,但是 ListView 仍然会更改 MouseMove 上的项目
    • 如果您没有将 projecteuler.net 链接放在您的个人资料中,我将有更多时间尝试您的答案。
    • 我阅读了您的评论并认为您的意思是链接到个人资料中的另一个网站是不礼貌的。再读一遍,听起来你检查过它并喜欢它:) 我在这里很新,所以.. 像这样链接到个人资料中的另一个网站是不礼貌的吗?
    • 绝对不错的方式。这是一个很棒的链接!我被困在解决这些难题而不是做真正的工作。
    猜你喜欢
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    相关资源
    最近更新 更多