Windows phone 7 向StackPanel添加项目时延迟UI更新

Windows phone 7 向StackPanel添加项目时延迟UI更新,windows-phone-7,user-interface,Windows Phone 7,User Interface,以下是我的问题的代码: private void button1_Click(object sender, RoutedEventArgs e) { Rectangle1.Fill = color; for (int i = 0; i < 1000; i++) { StackPanel1.Children.Add(new TextBlock() { Text = "TestBlock" }); } } 将文本块添加到StackPanel之前

以下是我的问题的代码:

private void button1_Click(object sender, RoutedEventArgs e)
{
    Rectangle1.Fill = color;
    for (int i = 0; i < 1000; i++)
    {
        StackPanel1.Children.Add(new TextBlock() { Text = "TestBlock" });
    }
}
将文本块添加到StackPanel之前。但这也不起作用。那么,在开始向StackPanel添加项目之前,如何更改矩形的颜色呢


我没有任何线索。

UpdateLayout
如果布局没有更改,则无效,这就是您的情况

您需要调用的是
InvalidateVisual
。然而,这不是一个很好的做法。 我宁愿更改填充
MouseLeftButtonDown
事件

XAML:

 <Button MouseLeftButtonDown="PreviewChangeRectangle" ...>

要添加到@MBen的注释中,我的理解是只有在所有处理完成后才会呈现虚拟树


您可以生成一个线程或使用threadpool,然后调用dispater来填充矩形,然后在for循环中使用dispatcher来添加文本框

WPF在您屈服于消息泵之前不会绘制任何内容。最简单的方法是使用async/await

private async void button1_Click(object sender, RoutedEventArgs e)
{
    Rectangle1.Fill = color;
    await Task.Yield();
    for (int i = 0; i < 1000; i++)
    {
        StackPanel1.Children.Add(new TextBlock() { Text = "TestBlock" });
    }
}
private async void按钮1\u单击(对象发送方,路由目标)
{
矩形1.填充=颜色;
等待任务;
对于(int i=0;i<1000;i++)
{
StackPanel1.Children.Add(newtextblock(){Text=“TestBlock”});
}
}

我找不到我的按钮的
PreviewMouseDown
事件。也没有
矩形1.InvalidateVisual
。我做错了什么(谢谢!是的,我注意到了。;)当我使用
MouseLeftButtonDown
事件时,它不会改变颜色,但会与
GotFocus
事件一起工作。实际上,我想在用户点击按钮(GotFocus)后立即执行这两个操作,我在问题中没有提到这一点。因此,我需要两个独立的
GotFocus
类事件,一方面用于填充矩形,另一方面用于执行其他操作。抱歉搞混了!
private void PreviewChangeRectangle(object sender, RoutedEventArgs e)
{
 Rectangle1.Fill = color;
}
private async void button1_Click(object sender, RoutedEventArgs e)
{
    Rectangle1.Fill = color;
    await Task.Yield();
    for (int i = 0; i < 1000; i++)
    {
        StackPanel1.Children.Add(new TextBlock() { Text = "TestBlock" });
    }
}