.NET ListBox - 禁止在鼠标悬停时选择项目

时间:2012-04-30 13:08:34

标签: c# wpf xaml listbox selection

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

具体来说: 要在某些情况下禁用闪烁,我只会在项目被拖动超过另一项目的一半时移动项目。当我开始在item2上拖动item1将其放在item2后面时,我希望在拖动时选择item1。一旦光标移动到item2上,就会选择item2。我怎样才能摆脱这种行为?

我已经尝试在拖动项目的同时在PreviewMouseMove中设置e.Handled = true,但这无济于事。

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

3 个答案:

答案 0 :(得分:1)

对我来说最干净的解决方案是从ItemsControl继承并实现我自己的“选择器”。

答案 1 :(得分:0)

这可能会搞砸了掉落部分,但是你尝试过给ListBoxItem鼠标捕获吗? MSDN有more details about this

希望这有帮助。

答案 2 :(得分:0)

这是一个ListView。我没有详细介绍你的代码。但是我在ListViewItem上做了PreviewMouseLeftButtonDown,我没有你描述的问题。

 <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>