1

我正在尝试使用代码模仿 ListView 中选择事件的行为。所以这里是示例代码:

<StackPanel>
    <Button x:Name="buttonSelectAbove" Content="Select Above"/>
    <Button x:Name="buttonSelectBelow" Content="Select Below"/>
    <ListView x:Name="listView"/>
</StackPanel>

这是背后的代码:

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();
    }
}

现在,如果您尝试这些代码,单击每个按钮并使用键盘上下移动列表将按预期工作,但是当您使用 SHIFT 单击选择一系列项目时,使用鼠标选择的行为会有所不同,这里有一些图像使其更清晰:

正常选择行为:
单击 C
在此处输入图像描述

然后shift点击E(将导致选择c,d,e) 在此处输入图像描述

通过代码行为选择:
单击 A,
在此处输入图像描述

单击下面的按钮选择两次,因此将选择 C 在此处输入图像描述

然后shift点击E(这将导致a,b,c,d,e被选中) 在此处输入图像描述

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

4

1 回答 1

0

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

于 2012-09-26T05:12:17.590 回答