WPF:列表框和虚拟化

Jon*_*len 13 wpf virtualization listbox

  1. 我如何知道我的列表是否正在虚拟化?
  2. 如何将此代码段虚拟化?

    <ScrollViewer Grid.Column="1" Name="LogScroller">
        <r:NoInheritanceContentControl>
            <ListBox   Background="Black" ItemsSource="{Binding Path=ActiveLog}" >
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Grid Background="Black">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="200"></ColumnDefinition>
                                <ColumnDefinition Width="*"></ColumnDefinition>
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition></RowDefinition>
                                <RowDefinition></RowDefinition>
                            </Grid.RowDefinitions>
                            <TextBlock Grid.Column="0" Grid.Row="0" Foreground="White">
                            <TextBlock >Date:</TextBlock>
                            <TextBlock  Text="{Binding Path=LogDate}"/>
                        </TextBlock>
                            <TextBlock Grid.Column="1" Grid.Row="0" Foreground="White">
                            <TextBlock >Severity:</TextBlock>
                            <TextBlock  Text="{Binding Path=Severity}"/>
                        </TextBlock>
                            <TextBlock Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1" Foreground="LightGray" Text="{Binding Path=Message}"></TextBlock>
                        </Grid>
                    </DataTemplate>
                </ListBox.ItemTemplate>
                <ListBox.Template>
                    <ControlTemplate>
                        <StackPanel Background="Black" IsItemsHost="True" >
                        </StackPanel>
                    </ControlTemplate>
                </ListBox.Template>
            </ListBox>
        </r:NoInheritanceContentControl>
    </ScrollViewer>
    
    Run Code Online (Sandbox Code Playgroud)

Bru*_*nez 14

您的代码示例未虚拟化,因为您强制使用a StackPanel.你必须使用VirtualizingStackPanel.


Ara*_*and 7

  1. 如果你想知道肯定的话.下载Snoop它有一个3d视图,您可以使用它来查看渲染的每个元素.(打开和关闭屏幕)如果您的列表框未虚拟化,您将看到所有列表项在可爱的三维视图中从页面上移动.

它是wpf开发人员必不可少的工具,因为它还有其他几个非常方便的功能

  1. 摆脱使用堆栈面板的列表框模板.如果它只是将背景设为黑色,那么只需将背景设置为黑色即可.