首页 > 解决方案 > ListBox 双击选择一个边缘项

问题描述

因此,当我使用显示其项目的标准 WPF ListBox 时,我可以在屏幕上看到底部项目的一半。当我单击此项目时,它会将其带入视图,因此我可以看到整个项目。太棒了; 但是,我正在使用双击打开一个表单。如果我双击的项目是最后一个并且只有一部分在视图中,那么第一次单击会将该项目带入视图,但第二次单击会选择下一个项目并将其打开。虽然目的是打开获得第一次点击的项目。有什么办法吗?这是xml

<ListBox
    x:Name="TestListBox"
    Loaded="TestListBox_OnLoaded"
    MouseDoubleClick="TestListBox_OnMouseDoubleClick">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock FontSize="40" Text="{Binding}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

和代码

    private void TestListBox_OnLoaded(object sender, RoutedEventArgs e)
    {
        for (var i = 0; i < 50; i++)
        {
            TestListBox.Items.Add(i);
        }
    }

    private void TestListBox_OnMouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        var foo = TestListBox.SelectedItem;
    }

如果您设置断点来查看 foo 的值,您将看到双击一个项目会将列表中的下一个项目显示为选定的项目。谢谢

标签: wpflistbox

解决方案


设置 ScrollViewer.CanContentScroll = "False"

<ListBox
x:Name="TestListBox"
Loaded="TestListBox_OnLoaded"
MouseDoubleClick="TestListBox_OnMouseDoubleClick" ScrollViewer.CanContentScroll = "False">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock FontSize="40" Text="{Binding}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

此外,您应该在项目上设置双击事件,目前它已分配给整个列表框,因此双击滚动条将触发事件。


推荐阅读