I made a sample to implement what you want with a ListView
based on my understanding, if I misundertand your question, please point out.
The Xaml code is:
<Grid>
<ListView x:Name="listView1" Width="350" Height="400" ItemsSource="{Binding}" PreviewKeyDown="listView1_PreviewKeyDown">
<ListView.View>
<GridView>
<GridViewColumn Header="Num" Width="80" DisplayMemberBinding="{Binding Num}" />
<GridViewColumn Header="Name" Width="80" DisplayMemberBinding="{Binding Name}"/>
<GridViewColumn Header="Type" Width="80" DisplayMemberBinding="{Binding Tyep}" />
<GridViewColumn Header="Author" Width="80" DisplayMemberBinding="{Binding Author}"/>
</GridView>
</ListView.View>
</ListView>
</Grid>
The cs code is:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
initList();
}
public void initList()
{
List<Book> listBook = new List<Book>();
for (int i = 0; i < 15; i++)
{
listBook.Add(new Book() { Num = "00" + i.ToString(), Name = "testBook" + i, Type = "Math", Author = "qiaobus" });
}
listView1.ItemsSource = listBook;
}
private void listView1_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Left)
{
DetailedWin win = new DetailedWin();
win.Show();
int selectedIndex = 0;
if (listView1.SelectedIndex > 0)
{
selectedIndex = listView1.SelectedIndex;
}
if (selectedIndex <= listView1.Items.Count)
{
listView1.SelectedIndex = selectedIndex + 1;
ListViewItem row = (ListViewItem)listView1.ItemContainerGenerator.ContainerFromIndex(selectedIndex + 1);
row.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}
}
}
}
public class Book
{
public string Num { get; set; }
public string Name { get; set; }
public string Type { get; set; }
public string Author { get; set; }
}
The Result picture is:
If the response is helpful, please click "Accept Answer" and upvote it.
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.