如何解决为什么我的listboxitems不会崩溃?
| 如果单击列表中间的项目,则我希望除1之外的所有元素都可以折叠。实际输出是剩余许多项目。为什么?这是整个程序。using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
namespace WpfApplication2
{
public partial class MainWindow : Window
{
public class obj { }
public MainWindow()
{
InitializeComponent();
List<obj> objList = new List<obj>();
for (int i = 0; i < 30; i++) objList.Add(new obj());
lb.ItemsSource = objList;
}
private void lb_SelectionChanged(object sender,SelectionChangedEventArgs e)
{
ListBox lb = sender as ListBox;
for (int i = 0; i < lb.Items.Count; i++)
{
ListBoxItem tmp = (ListBoxItem)(lb.ItemContainerGenerator.ContainerFromItem(lb.Items[i]));
if (tmp != null)
{
if (tmp.IsSelected)
tmp.Visibility = System.Windows.Visibility.Visible;
else
tmp.Visibility = System.Windows.Visibility.Collapsed;
}
}
}
}
}
<Window x:Class=\"WpfApplication2.MainWindow\"
xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"
xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"
Title=\"MainWindow\" Height=\"350\" Width=\"525\"
>
<Grid>
<ListBox Name=\"lb\" SelectionChanged=\"lb_SelectionChanged\" IsSynchronizedWithCurrentItem=\"True\" >
<ListBox.ItemTemplate >
<DataTemplate>
<StackPanel Orientation=\"Vertical\">
<TextBlock Name=\"tb1\" Text=\"whatever\"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Window>
解决方法
我相信是因为您使用
ItemContainerGenerator.ContainerFromItem
。
ListBox
默认情况下使用VirtualizingStackPanel
。因此,尚未创建加载窗口时屏幕上未显示的项目。将它们重新显示在屏幕上时,将它们设置为“ 4”无效。
您可以通过更改Window
的初始高度来解决这个问题。如果将其设置为550左右,它将按预期工作。如果将其设置为150左右,则仍然有很多元素可见。
如果您不打算拥有太多元素,可以做的一件事就是更改ItemsPanel
。
,您可能需要禁用虚拟化。除非需要,否则默认情况下不会创建ListBoxItems。当您折叠可见的ListBoxItems时,您会为更多的空间腾出空间,这些空间将在运行代码后创建。
将此添加到您的列表框:
VirtualizingStackPanel.IsVirtualizing=\"False\"
或者,您可能可以使用样式来折叠项目,如下所示:
<ListBox.ItemContainerStyle>
<Style TargetType=\"ListBoxItem\">
<Style.Triggers>
<Trigger Property=\"IsSelected\" Value=\"False\">
<Setter Property=\"Visibility\" Value=\"Collapsed\" />
</Trigger >
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。