コードを使用して 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 をクリック
次に、E を Shift クリックします (c、d、e が選択されます)。
コード動作による選択:
A をクリックし、
下の選択ボタンを2回クリックして、Cが選択されるようにします
次に、E を Shift クリックします (a、b、c、d、e が選択されます)。
では、コードを介して通常の選択動作を実現するにはどうすればよいですか?