重用文本视图和网格

本文关键字:网格 视图 文本 | 更新日期: 2023-09-27 18:08:17

我正在开发windows phone 8应用程序。

我动态地创建多个Textview和Grid内For循环。

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次进入,所以因为负载很重,当页面响应用户交互时有很多延迟。

如何降低负荷?这样我就可以发布动态创建的视图

重用文本视图和网格

基本上,您应该创建一个用户控件,而不是直接在页面cs代码中创建复杂的对象。在你的用户控制你预设的位置为你的元素,即,如果你想要它有一个图像和几个文本块,你只是把它们放在那里。这是一个模板。

然后,在循环中创建用户控件列表。

所以,你的代码看起来像:
for (int j = 0; j < 300; j++)
{
    SomeUserControl someUserControl = new SomeUserControl(constuctorValue1, constuctorValue2);
    ListOfSomeUserControls.Add(someUserControl);
    LayoutRoot.Children.Add(someUserControl);
}

其中ListOfSomeUserControls是在页面代码中定义的列表。

这里,你可以发送一些数据给构造函数,例如,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]