Wpf 如何以编程方式选择listviewitem,使其行为类似于使用鼠标/键盘进行选择

Wpf 如何以编程方式选择listviewitem,使其行为类似于使用鼠标/键盘进行选择,wpf,listview,Wpf,Listview,我试图用代码模拟ListView中选择事件的行为。下面是示例代码: <StackPanel> <Button x:Name="buttonSelectAbove" Content="Select Above"/> <Button x:Name="buttonSelectBelow" Content="Select Below"/> <ListView x:Name="listView"/> </StackPanel&g

我试图用代码模拟ListView中选择事件的行为。下面是示例代码:

<StackPanel>
    <Button x:Name="buttonSelectAbove" Content="Select Above"/>
    <Button x:Name="buttonSelectBelow" Content="Select Below"/>
    <ListView x:Name="listView"/>
</StackPanel>
现在,如果您尝试这些代码,单击每个按钮并使用键盘上下移动列表将按预期工作,但当您使用SHIFT-click选择一系列项目时,其行为将与使用鼠标选择不同,以下是一些图像以使其更清晰:

正常选择行为: 点击C

然后按住shift键并单击E将导致选择c、d、E

通过代码行为进行选择: 点击一个,

单击下面的“选择”按钮两次,以便选择C

然后按住shift键并单击E,它将导致选择a、b、c、d、E


那么如何通过代码实现正常的选择行为呢?

如果您不喜欢,可以在LIstView上使用SelectionMode=Single,它可以选择多行。

我希望它能够进行多行选择,只是编程选择后的SHIFT单击行为与正常的不同;啊,是的,我没有找到那一个,因为我不知道要搜索的正确关键字,看起来“多选锚定”是关键,感谢链接可能的重复
void buttonSelectBelow_Click(object sender, RoutedEventArgs e)
{
    listView.SelectedIndex += 1;
    ListViewItem lvi = listView.ItemContainerGenerator.ContainerFromItem(listView.SelectedItem) as ListViewItem;
    if (lvi != null)
    {
        lvi.Focus();
    }
}

void buttonSelectAbove_Click(object sender, RoutedEventArgs e)
{
    listView.SelectedIndex -= 1;
    ListViewItem lvi = listView.ItemContainerGenerator.ContainerFromItem(listView.SelectedItem) as ListViewItem;
    if (lvi != null)
    {
        lvi.Focus();
    }
}