2009-02-09 10 views

Répondre

1

Nous traitons toujours en réglant l'élément sélectionné dans le code. Si c'était le dernier élément de la liste, faites de l'index sélectionné le dernier élément. Sinon, nous en faisons un après celui qui a été supprimé. Je me débattais avec ce problème aussi (d'où cette modification)

if (SnippetsList.Items.Count > index) 
    SnippetsList.SelectedIndex = index; 
else 
    SnippetsList.SelectedIndex = SnippetsList.Items.Count - 1; 
+0

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) –

1

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

Questions connexes