La solution consistait à stocker l'index supprimé et à l'enregistrer pour plus tard. Un peu d'un hack, mais le mieux que je l'ai trouvé à ce jour:
<Window x:Class="KeepFocusAfterDelete.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="200" Width="200">
<Grid>
<ListBox KeyUp="ListBox_KeyUp">
<ListBoxItem>1</ListBoxItem>
<ListBoxItem>2</ListBoxItem>
<ListBoxItem>3</ListBoxItem>
<ListBoxItem>4</ListBoxItem>
</ListBox>
</Grid>
</Window>
et le code est
using System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
namespace KeepFocusAfterDelete
{
public partial class MainWindow : Window
{
int prev = -1;
public MainWindow() { InitializeComponent(); }
private void ListBox_KeyUp(object sender, KeyEventArgs e)
{
var list = sender as ListBox;
switch (e.Key)
{
case Key.Delete:
prev = list.SelectedIndex;
var items = list.SelectedItems.Cast<object>().ToList();
foreach (var item in items) list.Items.Remove(item);
prev = list.Items.Count > prev ? prev : list.Items.Count - 1;
list.SelectedIndex = prev;
break;
case Key.Up:
if (-1 != prev)
{
list.SelectedIndex = prev - 1;
prev = -1;
}
break;
case Key.Down:
if (-1 != prev)
{
prev = list.Items.Count > prev + 1 ? prev + 1: list.Items.Count - 1;
list.SelectedIndex = prev;
prev = -1;
}
break;
}
}
}
}
article Sélectionnez « 2 », appuyez sur Supprimer, puis flèche vers le bas. L'élément sélectionné passe rapidement de l'élément "1" à l'élément "4".
Merci, -Ole
remerciez you.However je pense que j'ai une question mise en œuvre de ce sujet. La raison en est que j'effectue la suppression en utilisant du XAML pur et je ne sais pas où utiliser le code ... (j'utilise caliburn) –