1

如果我向 StackPanel 添加按钮,我应该在什么时候运行以下代码?就目前而言,它在我的 OnNavigatedTo 函数中。我必须使用“异步”属性声明它,因为我有一些代码可以从 SQLite DB 中获取记录。

问题是当我访问这个“查看记录”页面时,我可以看到按钮被一个一个地绘制(所以只需要一秒钟但有一定的延迟,没有按钮,然后是一个,然后是两个,然后是三个等),显示不会出现按钮已经存在,它们一次添加一个,这很明显(这是使用模拟器和实际设备时)。我想知道我是否只是误用了 OnNavigatedTo 事件并且应该更早地运行此代码?

我确实尝试在构造函数中完成大部分操作,但由于某种原因,我无法访问 NavgiationContext 对象(我认为就是这样),以便从查询字符串中获取记录 ID,而且我认为我不能声明具有 aysnc 属性的构造函数。我想也许在构造函数中调用 initializeComponent() 方法之前运行我的代码可以工作吗?

            // Add ButtonStackPanel
            StackPanel ButtonStackPanel = new StackPanel();
            ButtonStackPanel.Name = "ButtonStackPanel";
            MainStackPanel.Children.Insert(2, ButtonStackPanel);


            // Add Buttons
            while (await statement.StepAsync())
            {
              Button button = new Button();

              button.Click += this.disease_Click;
              button.Content = Names[statement.GetTextAt(0)];
              button.FontSize = 28;
              button.Height = 80;

              ButtonStackPanel.Children.Add(button);
            }

只是在做事的顺序方面寻找一些一般性建议,以及是否可以将我的大部分代码放在 OnNavigatedTo 事件方法中。

谢谢

4

1 回答 1

0

目前,您在将按钮添加到 StackPanel 之前添加包含所有按钮的 StackPanel。因此,您可以通过将调用放在循环之后来消除看到单独绘制的每个按钮的延迟:

// Add ButtonStackPanel
StackPanel ButtonStackPanel = new StackPanel();
ButtonStackPanel.Name = "ButtonStackPanel";

// Add Buttons
while (await statement.StepAsync())
{
    Button button = new Button();

    button.Click += this.disease_Click;
    button.Content = Names[statement.GetTextAt(0)];
    button.FontSize = 28;
    button.Height = 80;

    ButtonStackPanel.Children.Add(button);
}

MainStackPanel.Children.Insert(2, ButtonStackPanel);

如果这需要太长时间,请考虑先添加加载动画,然后在添加带有按钮的 StackPanel 之前将其删除。

在之前的步骤中加载数据总是很棘手,您最终会将逻辑拆分为多个类,这可能会成为维护的噩梦。另一种选择是显示加载动画,即:

var progressBar = new ProgressBar() { IsIndeterminate = true };

MainStackPanel.Children.Insert(1, progressBar);
var stackPanel = new StackPanel();

// ...

MainStackPanel.Children.Remove(progressBar);
MainStackPanel.Children.Insert(1, stackPanel);

这样,您的用户现在就会知道某些事情仍在进行中,例如正在准备中。

于 2013-11-05T17:17:24.553 回答