强制 WPF 列表框恰好包含 x 个元素
本文关键字:包含 元素 WPF 列表 强制 | 更新日期: 2023-09-27 18:34:41
我试图强制ListBox显示偶数数量的元素 - 也就是说,如果有超过10个元素,我希望它只显示10个元素,并通过滚动使其他元素可用。我知道的唯一例子是Visual Studio intellisense弹出窗口。
我不想显示项目的一小部分,因为它看起来很丑。
我尝试将高度设置为 10 * item height
,并考虑边框、边距和填充,但还有其他因素 - 例如实际边框具有 1 像素的填充。即使考虑到这一点,大小也相差几个像素。这个解决方案正等着爆炸。
有什么想法吗?
谢谢!
使用行为来执行此操作。
行为允许您在 Xaml 中向控件添加功能。 这是一个教程:行为教程
为了让您了解这在代码中的外观:
Xaml:
<ListBox ItemsSource="{Binding MyData}">
<i:Interactions.Behaviors>
<b:TenItemsInViewBehavior/>
</i:Interactions.Behaviors>
</ListBox>
法典:
public class TenItemsInViewBehavior:Behavior<ListBox>
{
protected override OnAttached()
{
base.OnAttached();
//AssociatedObject is the ListView object - you can bind to its events
this.AssociatedObject. SelectionChanged+=CheckIfOnTenthItem;
}
private void CheckIfOnTenthItem(object sender, eventargs e)
{
....
}
}
发生的情况是行为绑定到控件并使用 OnAttached(( 方法通知您。 发生这种情况时,您会发现行为上名为"AssociatedObject"的属性填充了你的控件。 现在可以绑定到控件、其数据、事件等,并根据需要对其进行操作。
执行所需操作的一种方法是从 Listbox 中获取数据并将其存储在行为中,然后重新绑定前 10 条记录。 用户滚动到第 10 个后,您可以开始向列表中添加新项目(或根据需要操作列表(。
要获取行为,您需要下载 Expression Blend 并获取 System.Windows.Interactivity dll。 拥有它后,您可以卸载Blend。
行为是以模块化和一致的方式向控件添加额外功能的好方法。