我正在 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 中这样做,因为我需要它更流畅。