プログラムでグリッドの位置を変更する単純なアプリケーションを WPF で作成しています。
主な目的はボタンをクリックすることであり、グリッドは左、右、上、下などに移動し始めます.
だから私はこのコードを書いた:
Grid G = new Grid();
private void Window_Loaded_1(object sender, RoutedEventArgs e)
{
Thread tt = new Thread(() =>
{
Dispatcher.Invoke((MethodInvoker)delegate { RUN(); });
}); tt.Start();
}
private void RUN()
{
G.Margin = new Thickness(0, MAIN_GRID.ActualHeight, 0, 0);
G.Visibility = System.Windows.Visibility.Visible;
G.Background = System.Windows.Media.Brushes.Black;
MAIN_GRID.Children.Add(G);
while (G.Margin.Top > 0)
{
G.Margin = new Thickness(0, G.Margin.Top - 1, 0, 0);
MAIN_GRID.InvalidateVisual(); // tried refreshing the GUI but no good...
Thread.Sleep(10);
}
}
何が起こるかというと、アニメーションを表示せずに、必要なことを正確に実行します。
たとえば、私のコードはグリッドを 1 ピクセル上に移動してから 10 ミリ秒間スリープする必要があり、これでグリッドが実際に移動するのを確認できます。
しかし、代わりにフリーズし、完了するとグリッドの最終位置が表示されます。
スレッドのみを使用してWindowsアプリケーションでそれを行いましたが、正常に動作します。しかし、よりスムーズにする必要があったため、WPF でそれを行う必要がありました。