我正在使用Windows Phone 8应用程序。
我在For循环中动态创建多个Textview和Grid。
for (int j = 0; j < 300; j++)
{
Image image = new Image();
image.Source = new BitmapImage(new Uri("/Images/sample256.png", UriKind.RelativeOrAbsolute));
image.Tag = i.ToString();
Grid questionGrid = new Grid();
questionGrid.HorizontalAlignment = HorizontalAlignment.Center;
questionGrid.VerticalAlignment = VerticalAlignment.Center;
TextBlock question = new TextBlock();
question.TextWrapping = TextWrapping.Wrap;
question.TextAlignment = TextAlignment.Center;
question.Text = " this is the question and its id is Question" + i;
question.FontSize = 30;
question.Foreground = new SolidColorBrush(Colors.Black);
question.HorizontalAlignment = HorizontalAlignment.Center;
questionGrid.Children.Add(question);
Grid answerGrid = new Grid();
answerGrid.HorizontalAlignment = HorizontalAlignment.Center;
answerGrid.VerticalAlignment = VerticalAlignment.Center;
TextBlock answer = new TextBlock();
answer.TextWrapping = TextWrapping.Wrap;
answer.TextAlignment = TextAlignment.Center;
answer.Text = "this is answer and its id is Answer" + i;
answer.FontSize = 30;
answer.Foreground = new SolidColorBrush(Colors.Black);
answer.HorizontalAlignment = HorizontalAlignment.Center;
answerGrid.Children.Add(answer);
LayoutRoot.Children.Add(image);
LayoutRoot.Children.Add(questionGrid);
LayoutRoot.Children.Add(answerGrid);
}
正如您所看到的,我有大约300次进入,因此负载很重,当页面响应用户交互时会有很多延迟。
如何减轻负荷?这样我就可以恢复动态创建的观点。
答案 0 :(得分:0)
基本上,您不应直接在页面cs代码中创建复杂对象,而应创建用户控件。在用户控件上,您可以预设元素的位置,即如果您希望它具有图像和几个文本块,则只需将它们放在那里即可。那将是一个模板。
然后,在循环中创建用户控件列表。
所以,你的代码看起来像是:
for (int j = 0; j < 300; j++)
{
SomeUserControl someUserControl = new SomeUserControl(constuctorValue1, constuctorValue2);
ListOfSomeUserControls.Add(someUserControl);
LayoutRoot.Children.Add(someUserControl);
}
ListOfSomeUserControls是在页面代码上定义的List。
在这里,您可以向构造函数发送一些数据,例如someUserControl将是您的ImageUri或文本值。
或者,您可以在用户控件上创建一些属性以在那里设置数据。
或者,你可以在用户控制下创建一些方法,比如ChangeImageUri()或类似的东西。
要使用此动态创建的用户控件,您应该使用ListOfSomeUserControls [Index]。您也可以将此列表保存在某个地方以供以前使用。
这是基本的想法。
在链接中,您已共享,OP会为图像创建链接列表。感觉,差异:他在页面上有5个图像框和300个链接列表。所以,当你启动你的应用程序时,你有这个:
Image1 :: listOfUris [1] Image2 :: listOfUris [2] Image3 :: listOfUris [3] Image4 :: listOfUris [4] Image5 :: listOfUris [5]
点按下一步按钮后,您只需将此列表替换为1。
Image1 :: listOfUris [2] Image2 :: listOfUris [3] Image3 :: listOfUris [4] Image4 :: listOfUris [5] Image5 :: listOfUris [6]
这就是全部,只有5张图片,而不是300张。