重用文本视图和网格

时间:2014-06-12 17:19:05

标签: c# wpf windows-phone-8 windows-phone textblock

我正在使用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次进入,因此负载很重,当页面响应用户交互时会有很多延迟。

如何减轻负荷?这样我就可以恢复动态创建的观点。

1 个答案:

答案 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张。