wpf在循环期间更新TreeView复选框



我从wpf开始。我有一个TreeView,其中每个项目都有一个复选框。我正在尝试创建一个动画,其中复选框被编程地在循环中选中。在研究了一段时间之后,我想到了下面的方法——

private void Traverse_Click(object sender, RoutedEventArgs e)
{
ItemCollection items = tvMain.Items;
Task.Factory.StartNew( ()=>
Dispatcher.Invoke( (Action)(() =>
{
foreach (TreeViewItem item in items)
{
UIElement elemnt = getCheckbox();
if (elemnt != null)
{
CheckBox chk = (CheckBox)elemnt;
chk.IsChecked = !chk.IsChecked;                           
tvMain.Items.Refresh();                           
tvMain.UpdateLayout();
Thread.Sleep(500);
}
}
})));

然而,尽管我做了所有的尝试,树并没有在循环中更新,只是在循环结束时更新。所以复选框一次都被选中了。如何在循环中更新树呢?由于

Thread.Sleep替换为Task.Delay以"休眠";异步:

private async void Traverse_Click(object sender, RoutedEventArgs e)
{
ItemCollection items = tvMain.Items;
foreach (TreeViewItem item in items)
{
UIElement elemnt = getCheckbox();
if (elemnt != null)
{
CheckBox chk = (CheckBox)elemnt;
chk.IsChecked = !chk.IsChecked;
await Task.Delay(500);
}
}
}

最新更新