gpt4 book ai didi

WPF:如何避免 ListBox 或 ListView 中选中的复选框闪烁?

转载 作者:行者123 更新时间:2023-12-04 12:01:41 24 4
gpt4 key购买 nike

如何避免 WPF ListBox 或 ListView 中选中的复选框闪烁?通过单击刷新按钮或滚动列表框,可以使用下面的代码复制它。如果 IsChecked 为 false,则它不会闪烁。

Window1.xaml:

<Window x:Class="WpfApplication6.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<ListBox Name="listBox">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="True"
VerticalAlignment="Center"/>
<Label Padding="3"
Content="{Binding}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Button Content="Refresh"
Grid.Column="1"
VerticalAlignment="Top"
Click="Button_Click"/>
</Grid>
</Window>

Window1.xaml.cs:
using System.Windows;

namespace WpfApplication6
{
partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
Button_Click(null, null);
}

void Button_Click(object sender, RoutedEventArgs e)
{
var items = new int[10000];
for (int i = 0; i < items.Length; i++)
items[i] = i + 1;
listBox.ItemsSource = items;
}
}
}

最佳答案

它闪烁是因为您正在丢弃旧的 ItemsSource 并创建一个新的。这需要重做所有绑定(bind),并且需要重新创建显示每个项目的模板。为避免重新创建整个列表的性能开销,只需修改现有 ItemsSource 中的各个元素。然后绑定(bind)到更改的属性和/或项目的 DataTemplate 部分将自动更新,而无需重新创建整个 ListView 。这样做将消除您看到的“闪烁”。

试试这个代码隐藏:

public partial class MainWindow : Window
{
private ObservableCollection<object> _items;

public MainWindow()
{
InitializeComponent();

_items = new ObservableCollection<object>();
for (int i = 0; i < 10000; i++)
_items.Add(i + 1);
listBox.ItemsSource = _items;

}

void Button_Click(object sender, RoutedEventArgs e)
{
for (int i = 0; i < _items.Count;i++)
{
if (!(_items[i] is int)) continue;
_items[i] = (int)_items[i] + 1;
}
}
}

关于WPF:如何避免 ListBox 或 ListView 中选中的复选框闪烁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2007532/

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