gpt4 book ai didi

wpf - ListBox+WrapPanel 方向键导航

转载 作者:行者123 更新时间:2023-12-04 14:02:13 27 4
gpt4 key购买 nike

我正在尝试实现相当于 WinForms ListView及其View属性设置为 View.List .从视觉上看,以下工作正常。我的 Listbox 中的文件名从上到下,然后换行到新列。

这是我正在使用的基本 XAML:

<ListBox Name="thelist"
IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding}"
ScrollViewer.VerticalScrollBarVisibility="Disabled">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel IsItemsHost="True"
Orientation="Vertical" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>

但是,默认箭头键导航不会换行。如果选择了列中的最后一项,按向下箭头不会转到下一列的第一项。

我尝试处理 KeyDown像这样的事件:
private void thelist_KeyDown( object sender, KeyEventArgs e ) {
if ( object.ReferenceEquals( sender, thelist ) ) {
if ( e.Key == Key.Down ) {
e.Handled = true;
thelist.Items.MoveCurrentToNext();
}
if ( e.Key == Key.Up ) {
e.Handled = true;
thelist.Items.MoveCurrentToPrevious();
}
}
}

这会产生我想要的最后一列到第一列的行为,但也会在左右箭头处理中产生奇怪的现象。每当它使用向上/向下箭头从一列换行到下一列/上一列时,随后使用左箭头键或右箭头键将选择移动到在换行发生之前选择的项目的左侧或右侧。

假设列表中填充了字符串“0001”到“0100”,每列有 10 个字符串。如果我使用向下箭头键从“0010”转到“0011”,然后按向右箭头键,选择移动到“0020”,就在“0010”的右侧。如果选择了“0011”并且我使用向上箭头键将选择移动到“0010”,然后按下右箭头键将选择移动到“0021”(在“0011”的右侧,然后按下左侧箭头键将选择移动到“0001”。

任何帮助实现所需的列换行布局和箭头键导航将不胜感激。

(编辑移至我自己的答案,因为它在技术上是一个答案。)

最佳答案

事实证明,当它在我处理 KeyDown 时出现事件,选择更改为正确的项目,但焦点在旧项目上。

这是更新的KeyDown事件处理程序。由于绑定(bind),Items集合返回我的实际项目而不是 ListBoxItem s,所以我必须在接近尾声时打个电话才能得到实际的 ListBoxItem我需要调用Focus()在。可以通过交换 MoveCurrentToLast() 的调用来实现从最后一个项目到第一个项目的包装,反之亦然。和 MoveCurrentToFirst() .

private void thelist_KeyDown( object sender, KeyEventArgs e ) {
if ( object.ReferenceEquals( sender, thelist ) ) {
if ( thelist.Items.Count > 0 ) {
switch ( e.Key ) {
case Key.Down:
if ( !thelist.Items.MoveCurrentToNext() ) {
thelist.Items.MoveCurrentToLast();
}
break;

case Key.Up:
if ( !thelist.Items.MoveCurrentToPrevious() ) {
thelist.Items.MoveCurrentToFirst();
}
break;

default:
return;
}

e.Handled = true;
ListBoxItem lbi = (ListBoxItem) thelist.ItemContainerGenerator.ContainerFromItem( thelist.SelectedItem );
lbi.Focus();
}
}
}

关于wpf - ListBox+WrapPanel 方向键导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/134068/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com