내부에 사용자 지정 항목이있는 WPF 목록 상자가 있습니다.목록 상자에서 항목을 제거하면 목록 상자에는 선택된 항목이 없습니다.
사용자가 항목을 삭제하려고 할 때, 목록에 초점이 맞지 않는 것처럼 보이거나 선택한 항목이 없기 때문에 목록에서 수동으로 다시 선택해야합니다.
아이디어가 있으십니까?
감사 조나단
내부에 사용자 지정 항목이있는 WPF 목록 상자가 있습니다.목록 상자에서 항목을 제거하면 목록 상자에는 선택된 항목이 없습니다.
사용자가 항목을 삭제하려고 할 때, 목록에 초점이 맞지 않는 것처럼 보이거나 선택한 항목이 없기 때문에 목록에서 수동으로 다시 선택해야합니다.
아이디어가 있으십니까?
감사 조나단
우리는 항상 코드에서 선택한 항목을 설정하여이를 처리합니다. 항목이 목록의 마지막 항목 인 경우 선택한 항목을 마지막 항목으로 만듭니다. 그렇지 않으면 우리는 삭제 된 것 다음의 것으로 만듭니다.
if (SnippetsList.Items.Count > index)
SnippetsList.SelectedIndex = index;
else
SnippetsList.SelectedIndex = SnippetsList.Items.Count - 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"로 빠르게 변경됩니다.
이 you.However 감사
감사합니다, -Ole는 나는이를 구현하는 몇 가지 문제를 가지고 생각합니다. 그 이유는 내가 순수 XAML을 사용하여 삭제를 수행하고 어디서 코드를 사용해야할지 모르겠다 ... (caliburn 사용) –