重用文本视图和网格

2024-01-31

我正在开发 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 次,因此由于负载很重,并且页面响应用户交互时存在很大的延迟。

如何减轻负载?这样我就可以重用动态创建的视图。


基本上,您应该创建一个用户控件,而不是直接在页面 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 创建了一个列表links到图像。感受一下不同之处:他的页面上有 5 个图像框和一个包含 300 个链接的列表。因此,当您启动应用程序时,您会看到:

Image1::listOfUris[1] Image2::listOfUris[2] Image3::listOfUris[3] Image4::listOfUris[4] Image5::listOfUris[5]

当您点击next按钮,您只需将此列表替换 1。

Image1::listOfUris[2] Image2::listOfUris[3] Image3::listOfUris[4] Image4::listOfUris[5] Image5::listOfUris[6]

仅此而已,只有 5 张图片,而不是 300 张。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重用文本视图和网格 的相关文章

随机推荐