Fix #342: better async thumbnail loading

This commit is contained in:
Paddy Xu
2018-09-07 21:33:49 +03:00
parent 89f1bb46b6
commit 08ccedece4
10 changed files with 287 additions and 84 deletions

View File

@@ -12,6 +12,7 @@
d:DesignWidth="720.29">
<UserControl.Resources>
<ResourceDictionary>
<local:AsyncPageToThumbnailConverter x:Key="AsyncPageToThumbnailConverter" />
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/QuickLook.Common;component/Styles/MainWindowStyles.xaml" />
<ResourceDictionary Source="ListBoxItemStyleNoFocusedBorder.xaml" />
@@ -23,17 +24,20 @@
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ListBox x:Name="listThumbnails" Grid.Column="0" VirtualizingPanel.ScrollUnit="Pixel"
VirtualizingPanel.IsVirtualizing="True" Width="150"
<ListBox x:Name="listThumbnails" Grid.Column="0" Width="150"
SelectedIndex="0"
Focusable="False"
HorizontalContentAlignment="Center"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling"
Background="Transparent" BorderThickness="0"
ItemsSource="{Binding PageThumbnails, ElementName=thisPdfViewer}"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ItemsSource="{Binding ElementName=thisPdfViewer, Path=PageThumbnails}"
ItemContainerStyle="{Binding Mode=OneWay, Source={StaticResource ListBoxItemStyleNoFocusedBorder}}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid MaxHeight="150"
<Grid Height="150"
MinWidth="30"
MaxWidth="{Binding ViewportWidth, Mode=Default, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ScrollViewer}}}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10" />
@@ -45,8 +49,15 @@
<RowDefinition Height="*" />
<RowDefinition Height="10" />
</Grid.RowDefinitions>
<Border x:Name="bbd" Grid.Row="1" Grid.Column="1" BorderThickness="1" BorderBrush="#33FFFFFF">
<Image Source="{Binding}" />
<Border x:Name="bbd" Grid.Row="1" Grid.Column="1" BorderThickness="1" BorderBrush="Gray">
<Image Source="{Binding Path=Result}">
<Image.DataContext>
<MultiBinding Converter="{StaticResource AsyncPageToThumbnailConverter}">
<Binding Path="PdfDocumentWrapper" ElementName="thisPdfViewer" />
<Binding />
</MultiBinding>
</Image.DataContext>
</Image>
</Border>
<!--
<Label Grid.Row="1" Grid.Column="1" Content="{Binding Mode=OneWay, Converter={StaticResource MathConverter}, ConverterParameter=@VALUE+1}" FontSize="14" />