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" });
}
}