gpt4 book ai didi

C# WPF 更新 GUI 和移动网格

转载 作者:太空宇宙 更新时间:2023-11-03 11:03:29 25 4
gpt4 key购买 nike

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

最佳答案

您的“while”循环正在锁定 UI 线程并阻止出现增量更改。两种选择是 1将循环主体包装到一个由 Dispatcher 调用的方法中(从而释放 UI 线程以更新用户界面)。

或者 [2] 动态创建一个 Storyboard,在 Margin Top 上使用 DoubleAnimation。使用 [2] 需要您预先测量移动量,但如果您想在网格接近其最终目的地时添加一个令人印象深刻的缓动函数,这可能是值得的。

1是最快实现的,[2] 允许一个光滑的视觉效果。 msdn docs are here

关于C# WPF 更新 GUI 和移动网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16847990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com