Use Virtualizing StackPanel instead of GridView to greatly reduce the loading resources.

This commit is contained in:
弘韬 张 2020-11-15 20:39:02 +08:00
parent 7dc247333c
commit c89ee33c5b

View file

@ -16,6 +16,7 @@
Style="{DynamicResource BaseListboxStyle}" Focusable="False"
KeyboardNavigation.DirectionalNavigation="Cycle" SelectionMode="Single"
VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Standard"
ScrollViewer.IsDeferredScrollingEnabled="True"
SelectionChanged="OnSelectionChanged"
IsSynchronizedWithCurrentItem="True"
PreviewMouseDown="ListBox_PreviewMouseDown">
@ -29,26 +30,20 @@
</ControlTemplate>
</Button.Template>
<Button.Content>
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="5"
Cursor="Hand" UseLayoutRounding="False">
<Grid.Resources>
<VirtualizingStackPanel Orientation="Horizontal" Margin="5,0,5,0">
<VirtualizingStackPanel.Resources>
<converter:HighlightTextConverter x:Key="HighlightTextConverter"/>
<converter:OrdinalConverter x:Key="OrdinalConverter" />
<converter:OpenResultHotkeyVisibilityConverter x:Key="OpenResultHotkeyVisibilityConverter" />
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="32" />
<ColumnDefinition />
<ColumnDefinition Width="0" />
</Grid.ColumnDefinitions>
</VirtualizingStackPanel.Resources>
<Image x:Name="ImageIcon" Width="32" Height="32" HorizontalAlignment="Left"
Source="{Binding Image.Value}" />
<Grid Margin="5 0 5 0" Grid.Column="1" HorizontalAlignment="Stretch">
<Grid Margin="5 0 5 0" HorizontalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto" x:Name="SubTitleRowDefinition" />
</Grid.RowDefinitions>
<StackPanel Visibility="{Binding ShowOpenResultHotkey}">
<VirtualizingStackPanel Visibility="{Binding ShowOpenResultHotkey}">
<TextBlock Margin="0 5 5 0" Style="{DynamicResource ItemSubTitleStyle}" HorizontalAlignment="Right" Opacity="0.8" >
<TextBlock.Visibility>
<Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=ListBoxItem}" Converter="{StaticResource ResourceKey=OpenResultHotkeyVisibilityConverter}" />
@ -60,7 +55,7 @@
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
</VirtualizingStackPanel>
<TextBlock Style="{DynamicResource ItemTitleStyle}" DockPanel.Dock="Left"
VerticalAlignment="Center" ToolTip="{Binding ShowTitleToolTip}" x:Name="Title"
Text="{Binding Result.Title}">
@ -81,7 +76,7 @@
</vm:ResultsViewModel.FormattedText>
</TextBlock>
</Grid>
</Grid>
</VirtualizingStackPanel>
</Button.Content>
</Button>
<!-- a result item height is 50 including margin -->