Recycle items for result list box

This commit is contained in:
VictoriousRaptor 2026-01-03 12:16:30 +08:00
parent 83883c4b05
commit 0364fafdf0
2 changed files with 10 additions and 7 deletions

View file

@ -27,7 +27,7 @@
Style="{DynamicResource BaseListboxStyle}" Style="{DynamicResource BaseListboxStyle}"
VirtualizingPanel.ScrollUnit="Item" VirtualizingPanel.ScrollUnit="Item"
VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Standard" VirtualizingStackPanel.VirtualizationMode="Recycling"
Visibility="{Binding Visibility}" Visibility="{Binding Visibility}"
mc:Ignorable="d"> mc:Ignorable="d">
<!-- IsSynchronizedWithCurrentItem: http://stackoverflow.com/a/7833798/2833083 --> <!-- IsSynchronizedWithCurrentItem: http://stackoverflow.com/a/7833798/2833083 -->

View file

@ -12,7 +12,7 @@ namespace Flow.Launcher
{ {
protected Lock _lock = new(); protected Lock _lock = new();
private Point _lastpos; private Point _lastpos;
private ListBoxItem curItem = null; private ResultViewModel _currentResult = null;
public ResultListBox() public ResultListBox()
{ {
InitializeComponent(); InitializeComponent();
@ -60,9 +60,12 @@ namespace Flow.Launcher
{ {
lock (_lock) lock (_lock)
{ {
curItem = (ListBoxItem)sender; if (sender is FrameworkElement { DataContext: ResultViewModel result })
var p = e.GetPosition((IInputElement)sender); {
_lastpos = p; _currentResult = result;
var p = e.GetPosition((IInputElement)sender);
_lastpos = p;
}
} }
} }
@ -82,9 +85,9 @@ namespace Flow.Launcher
{ {
lock (_lock) lock (_lock)
{ {
if (curItem != null) if (_currentResult != null && sender is ListBox listBox)
{ {
curItem.IsSelected = true; listBox.SelectedItem = _currentResult;
} }
} }
} }