2009-02-09 6 views

답변

1

우리는 항상 코드에서 선택한 항목을 설정하여이를 처리합니다. 항목이 목록의 마지막 항목 인 경우 선택한 항목을 마지막 항목으로 만듭니다. 그렇지 않으면 우리는 삭제 된 것 다음의 것으로 만듭니다.

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

이 you.However 감사

감사합니다, -Ole는 나는이를 구현하는 몇 가지 문제를 가지고 생각합니다. 그 이유는 내가 순수 XAML을 사용하여 삭제를 수행하고 어디서 코드를 사용해야할지 모르겠다 ... (caliburn 사용) –

1

나는이 문제에도 너무 어려움을 겪고있었습니다. 해결책은 삭제 된 색인을 저장하고 나중에 저장하기 위해서였습니다. A A 해킹의 비트,하지만 최고의 내가 지금까지 발견 :

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

와 코드가

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

선택 항목으로 "2"를 눌러 삭제 한 다음 아래쪽 화살표. 선택한 항목이 항목 "1"에서 항목 "4"로 빠르게 변경됩니다.

관련 문제