Xaml UWP:InkCanvas实例的创建有上限吗?

Xaml UWP:InkCanvas实例的创建有上限吗?,xaml,uwp,windows-store-apps,winrt-xaml,Xaml,Uwp,Windows Store Apps,Winrt Xaml,在一个UWP项目中,我在每个ListViewItem中放置了一个InkCanvas。但是当项目数超过126时,我得到了一个XamlParseException,它抱怨: 无法创建Windows.UI.Xaml.Controls.InkCanvas类型的实例 下面是一些天真的代码片段: <Page x:Class="App9.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

在一个UWP项目中,我在每个ListViewItem中放置了一个
InkCanvas
。但是当项目数超过126时,我得到了一个XamlParseException,它抱怨: 无法创建Windows.UI.Xaml.Controls.InkCanvas类型的实例

下面是一些天真的代码片段:

<Page x:Class="App9.MainPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <ListView ItemsSource="{x:Bind Items, Mode=OneWay}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <InkCanvas />
                    </Grid>
                </DataTemplate>
            </ListView.ItemTemplate>
            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel />
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>
        </ListView>
    </Grid>
</Page>
我得到了一个不同的运行时错误: System.OutOfMemoryException:“内存不足,无法继续执行程序。”


但通过inspect Task Manager,我可以看到一个应用程序包含100个InkCanvas实例,只占用不超过40mb的内存。这很令人困惑。

这是个坏主意。为什么要创建这么多的项目?您至少应该启用虚拟化。更不用说
InkCanvas
是一个沉重的控制…谢谢你,贾斯汀!在我的工作应用程序中,我启用了虚拟化。我将它们放在一个ListView中,它将动态创建大约10到60个ListViewItems。但在我刷新ListView大约3次后,应用程序将崩溃。出现这样的运行时错误。每个InkCanvas应该显示什么?似乎有很多“InkCanvas+内存不足”问题。看起来InkCanvas是一个很重的控件,所以我将仅在需要时动态创建InkCanvas,并使用图像渲染墨迹笔划。谢谢,伙计们!供参考:
public sealed partial class MainPage : Page
{
    public ObservableCollection<int> Items { get;  }
    public MainPage()
    {
        this.Items = new ObservableCollection<int>();
        for (int i = 0; i < 130; i++)
        {
            this.Items.Add(i);
        }
        InitializeComponent();

    }
}
  for (int i = 0; i < 130; i++)
    {
        this.lvw.Items.Add(new InkCanvas());
    }