列表框双击以选择边缘项目

时间:2018-07-06 12:35:23

标签: wpf listbox

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

<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的值,您将看到双击一个项目将列表中的下一个项目显示为选定项。 谢谢

1 个答案:

答案 0 :(得分:1)

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

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