C# WPF加载控制占用大量时间

C# WPF加载控制占用大量时间,c#,wpf,C#,Wpf,我有一个字符串数组,比如 string[] strngData = new string[] {"12","11","23","34"}; 此字符串数组长度最多可达4000。我需要为每个字符串创建一个文本框,并在scrollviewer的stackpanel中加载所有文本框 随着字符串数量的增加和文本框数量的增加,将控件呈现到UI所需的时间也会增加。显示4000多个字符串大约需要18秒以上的时间 有没有办法缩短渲染时间?n在stackpanel的位置,您可以使用ListView,它具有内置延

我有一个字符串数组,比如

string[] strngData  = new string[] {"12","11","23","34"};
此字符串数组长度最多可达4000。我需要为每个字符串创建一个文本框,并在scrollviewer的stackpanel中加载所有文本框

随着字符串数量的增加和文本框数量的增加,将控件呈现到UI所需的时间也会增加。显示4000多个字符串大约需要18秒以上的时间


有没有办法缩短渲染时间?

n在stackpanel的位置,您可以使用ListView,它具有内置延迟UI加载和自定义ItemTemplate和ItemsPanelTemplate:

<ListView Name="x" ItemsSource="..." HorizontalContentAlignment="Stretch" VirtualizingPanel.IsVirtualizing="True">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel  HorizontalAlignment="Stretch" Orientation="Vertical"/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListView.ItemTemplate>
        <DataTemplate>
            <TextBox Text="{Binding Path=/}"/>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

有一些关键时刻:您必须在ItemsPanel模板中使用VirtualzingStackPanel来代替通常的StackPanel;文本框。文本绑定路径必须等于/使用当前项;我还测试了ObservaleCollection的示例,因此使用列表可能不允许您编辑项目位置、计数等。

用户是否一次查看所有文本框?一次只加载其中的一部分。加载100,然后当用户向下滚动时,再加载100,以此类推。为什么要加载文本框?比如说,为什么不设计一个listview或其他类似的用来获取此类数据的工具呢?@piyush用户每次可以看到112条文本boxes@Vasile您能推荐一些代码来实现此目的吗?默认情况下,ListView应该启用UI虚拟化,因此您不需要显式设置ItemsPanel模板。@PieterWitvoet,我设置了ItemsPanel cos op,它很可能会将默认模板更改为固定边距或填充,而该示例将不起作用。