绘制网格的最快方法c#

时间:2016-09-04 19:23:47

标签: c# wpf

目前我正在绘制一个"细胞的网格" (每个单元格是唯一的 - 不同的颜色,边框等)使用WPF窗口,使用网格并将单元格列表绑定到ItemsControl ItemSource。

......这很慢,很慢。需要几秒钟才能渲染。有没有更快的方式来绘制这样的网格?

<Window.Resources>
    <DataTemplate x:Key="CellTemplate">  
        <local:CellImage Width="10" Height="10" CellProperty="{Binding}"></local:CellImage>
    </DataTemplate>

    <DataTemplate x:Key="WholeTemplate">
        <ItemsControl ItemsSource="{Binding}" ItemTemplate="{StaticResource CellTemplate}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
    </DataTemplate>

</Window.Resources>
<Grid Name="WholeGrid">
    <StackPanel>
        <ItemsControl x:Name="WholeGrid" ItemTemplate="{DynamicResource WholeTemplate}">
        </ItemsControl>
    </StackPanel>
</Grid>

和绑定:

        List<List<Cell>> lsts = new List<List<Cell>>();
        WholeGrid.ItemsSource = lsts;

1 个答案:

答案 0 :(得分:1)

将堆栈面板更改为VirtualizingStackPanel,如下所示

ItemsControl ItemsSource="{Binding}" ItemTemplate="{StaticResource CellTemplate}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <VirtualizingStackPanel Orientation="Horizontal"/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>

然后它只会绘制那些可见的项目,并且应该更快,当你滚动它时应该绘制尽可能多的项目。