none
WPF UI 가상화 RRS feed

  • 질문

  • WPF 트리뷰를 사용하고 있는데, 항목이 많아서 UI 가상화를 하려고 합니다.

    그래서,                                                 

    <TreeView VirtualizingStackPanel.IsVirtualizing="True" 
                     VirtualizingStackPanel.VirtualizationMode="Recycling"
                     ItemsSource="{Binding RootCollView}"
                     Template="{DynamicResource TreeViewControlTemplate1}"
                     ItemContainerStyle="{DynamicResource TreeViewItemStyle1}" >

    ...

    </TreeView>

                                               

    <ControlTemplate x:Key="TreeViewControlTemplate1" TargetType="{x:Type TreeView}">
         <Border x:Name="Bd" SnapsToDevicePixels="True">
               <ScrollViewer x:Name="scrollViewer" CanContentScroll="True" Focusable="False" 
                                  HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" 
                                  Padding="{TemplateBinding Padding}" 
                                  SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
                                  VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}" 
                                  Template="{DynamicResource TreeViewScrollViewerControlTemplate}">
                        <ScrollViewer.Resources>
                            <Style x:Key="{x:Type ScrollBar}" TargetType="{x:Type ScrollBar}">
                                <Setter Property="UseLayoutRounding" Value="True"/>
                            </Style>
                        </ScrollViewer.Resources>
                         <Grid Margin="0,0,0,1">
                                  <ItemsPresenter x:Name="content"/>
                                  <Canvas>
                                         <Border x:Name="selectionBorder" BorderThickness="1" HorizontalAlignment="Left" />
                                  </Canvas>
                         </Grid>
                    </ScrollViewer>
                </Border>
            </ControlTemplate>

    이렇게 사용하는데, ControlTemplate의 ScrollViewer에서 Grid를 제거하고 바로 ItemsPresenter를 사용하면 트리 확장할 때, 시간 지연이 없는데 Grid가 있으면 시간이 오래 걸립니다.

    왜 이런 현상이 생기는 건지 궁금하고, 만약 ScrollViewer에 Grid를 넣어도 트리 확장할 때 시간 지연이 없게 하려면 어떻게 해야 할지 궁금합니다.

    2021년 4월 21일 수요일 오전 5:14

모든 응답