1

ボタンを StackPanel に追加する場合、次のコードをいつ実行する必要がありますか? 今のところ、それは私の OnNavigatedTo 関数にあります。SQLite DB からレコードをフェッチするコードがあるため、「async」プロパティを使用して宣言する必要があります。

問題は、この「レコードの表示」ページにアクセスすると、ボタンが 1 つずつ描画されているのを確認できることです (したがって、1 秒しかかかりませんが、明確なラグがあり、ボタンがなく、次に 1 つ、次に 2 つ、次に 3 つ表示されます)。など)、ボタンが既に存在する状態でディスプレイが表示されず、一度に 1 つずつ追加されており、非常に明白です (これは、エミュレーターと実際のデバイスを使用している場合です)。OnNavigatedTo イベントを誤って使用しただけで、このコードを以前に実行する必要があるのではないかと思いました。

私はコンストラクターでそのほとんどを試してみましたが、何らかの理由で、クエリ文字列からレコード ID を取得するために NavgationContext オブジェクトにアクセスできませんでした (それがそうだったと思います)。宣言できないと思います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 に答える