.NET 列表框 - 禁用在鼠标悬停时选择项目

本文关键字:悬停 鼠标 选择 项目 列表 NET | 更新日期: 2023-09-27 18:32:47

我有一个单选模式下的列表框,其中包含一些项目。我实现了用户能够通过拖放对项目重新排序。一切正常,但它看起来非常丑陋,因为如果鼠标按钮向下并且光标在项目上移动,列表框会自动选择一个项目。

具体来说:为了在某些情况下禁用闪烁,我仅在项目在另一个项目上拖动一半以上时才移动项目。当我开始将 item1 拖到 item2 上以将其放在 item2 后面时,我希望在拖动时选择 item1。发生的情况是,一旦光标移到 item2 上,就会选择 item2。如何摆脱这种行为?

我已经尝试在拖动项目时在预览鼠标移动中设置 e.Handle = true,但这无济于事。

如果您想查看代码,请点击此处:http://pastebin.com/GTj96qV9。这是一种行为,它使任何具有 IList 作为数据源的列表框能够通过拖动对其内容重新排序。

.NET 列表框 - 禁用在鼠标悬停时选择项目

对我来说

,最干净的解决方案是从ItemsControl继承并实现我自己的"选择器"。

这可能会搞砸拖放部分,但是您是否尝试过提供ListBoxItem鼠标捕获?MSDN 提供了有关此内容的更多详细信息。

希望这有帮助。

这是一个

列表视图。 我没有详细介绍您的代码。 但是我在ListViewProject上预览鼠标左按钮,我没有你描述的问题。

 <ListView.ItemContainerStyle>
            <Style TargetType="{x:Type ListViewItem}">
                <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListView1Item_PreviewMouseLeftButtonDown" />
                <Setter Property="AllowDrop" Value="True" />
                <EventSetter Event="DragDrop.Drop" Handler="ListView1Item_DragDrop" />
                <Style.Triggers>                     
                    <DataTrigger Binding="{Binding DispDetail}" Value="False">
                        <Setter Property="Visibility" Value="Collapsed"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ListView.ItemContainerStyle>