强制 WPF 列表框恰好包含 x 个元素

本文关键字:包含 元素 WPF 列表 强制 | 更新日期: 2023-09-27 18:34:41

我试图强制ListBox显示偶数数量的元素 - 也就是说,如果有超过10个元素,我希望它只显示10个元素,并通过滚动使其他元素可用。我知道的唯一例子是Visual Studio intellisense弹出窗口。

我不想显示项目的一小部分,因为它看起来很丑。

我尝试将高度设置为 10 * item height ,并考虑边框、边距和填充,但还有其他因素 - 例如实际边框具有 1 像素的填充。即使考虑到这一点,大小也相差几个像素。这个解决方案正等着爆炸。

有什么想法吗?

谢谢!

强制 WPF 列表框恰好包含 x 个元素

使用行为来执行此操作。

行为允许您在 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。

行为是以模块化和一致的方式向控件添加额外功能的好方法。