Xaml UWP:InkCanvas实例的创建有上限吗?
在一个UWP项目中,我在每个ListViewItem中放置了一个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"
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());
}