wpf virtualizingstackpanel различное поведение на разных машинах Win10 - PullRequest
0 голосов
/ 12 сентября 2018

Мое приложение WPF использует VirtualizingStackPanel для ListView. Прокрутка этого списка работает нормально на двух разных машинах: моей хост-машине (Windows 10 v1803, сборка 17134.228) и одной виртуальной машине (Windows 10 v1607, сборка 14393.2312). Если я запускаю то же приложение, точно такую ​​же копию, на другой моей виртуальной машине (Windows 10 v1803, сборка 17134.165), список не будет плавно прокручиваться - он будет очень медленным. Короткие шаги прокрутки по нескольким строкам - это хорошо (CacheLength), но прокрутка по нескольким строкам очень плохая, в большинстве случаев виртуализация не работает должным образом. Кто-нибудь знает, зависит ли виртуализация от какого-либо компонента или настроек системы Windows 10?
Просто вставьте часть кода с ListView. Спасибо за помощь.

Обновление: извините за дезинформацию - прокрутка не медленная, блок прокрутки - это не элемент, а целая страница (возможно, больше, чем страница). Так что визуальный эффект прокрутки плохой.

<ListView Grid.Row="1"  Margin="0,-23,0,0"  x:Name="LogMessagesListView"  ItemsSource="{Binding DataModel.LogMessagesList}" 
    VirtualizingPanel.ScrollUnit="Item"
    VirtualizingPanel.CacheLengthUnit="Page"
    VirtualizingPanel.CacheLength="1.1"
    VirtualizingPanel.IsVirtualizing="True"                      
    VirtualizingPanel.VirtualizationMode="Recycling"
    SelectionMode="Extended" SelectionChanged="LogMessagesListView_SelectionChanged" >
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel/>
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <EventSetter Event="MouseDoubleClick" Handler="HandleLogMessageDoubleClick"/>
            <Setter Property="VerticalContentAlignment" Value="Top"/>
            <Setter Property="BorderThickness" Value="0"/>
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="{Binding DataContext.Runtime.ColumnWidthHighlight, ElementName=root }"/>
                    <ColumnDefinition Width="{Binding DataContext.Runtime.ColumnWidthLevel , ElementName=root}"/>
                    <ColumnDefinition Width="{Binding DataContext.Runtime.ColumnWidthDate, ElementName=root}"/>
                    <ColumnDefinition Width="{Binding DataContext.Runtime.ColumnWidthTime, ElementName=root}"/>
                    <ColumnDefinition Width="{Binding DataContext.Runtime.ColumnWidthProcess, ElementName=root }"/>
                    <ColumnDefinition Width="{Binding DataContext.Runtime.ColumnWidthNumber, ElementName=root }"/>
                    <ColumnDefinition Width="{Binding DataContext.Runtime.ColumnWidthCategory, ElementName=root }"/>
                    <ColumnDefinition Width="auto"/>
                </Grid.ColumnDefinitions>

                <Grid Grid.Column="0" Height="14" Width="15" Margin="-14,0,0,0">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>

                    <Border Grid.Column="0" Background="Green" CornerRadius="0" BorderThickness="0" Height="14" HorizontalAlignment="Stretch"
                                    Visibility="{Binding IsBookmarked, Converter={StaticResource BoolToVisibility}}"/>
                    <Border Grid.Column="1" Background="Yellow" CornerRadius="0" BorderThickness="0" Height="14" HorizontalAlignment="Stretch"
                                Visibility="{Binding IsHighlighted, Converter={StaticResource BoolToVisibility}}"/>
                    <Border Grid.Column="2" Background="RoyalBlue" CornerRadius="0" BorderThickness="0" Height="14" HorizontalAlignment="Stretch"
                                Visibility="{Binding IsSearchTextHighlighted, Converter={StaticResource BoolToVisibility}}"/>
                </Grid>

                <Image Grid.Column="1" Source="{Binding Level, Converter={StaticResource LevelToImage}}" Width="14" Margin="-2,0,0,0"/>
                <TextBlock Grid.Column="2" Text="{Binding LogDate}" Margin="1,0,0,1"/>
                <TextBlock Grid.Column="3" Text="{Binding LogTime}" Margin="1,0,0,1"/>
                <TextBlock Grid.Column="4" Text="{Binding ProcessName}"  Margin="1,0,0,1"/>
                <TextBlock Grid.Column="5" Text="{Binding MessageNumber}" Margin="1,0,0,1"/>
                <TextBlock Grid.Column="6" Text="{Binding CategoryName}" Margin="1,0,0,1"/>
                <local:TextBlockHighlight Grid.Column="7" Margin="1,0,0,1"
                                                   IsSelected="{Binding IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}}"
                                                   Highlighter="{Binding DataContext.DataModel.Highlighter, ElementName=root}"
                                                   LogMessage="{Binding .}"
                                                   DummyTrigger="{Binding MessageInlines}" />
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
...