强制WPF ListBox包含正好x个元素

时间:2012-05-18 18:46:51

标签: c# wpf listbox

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

我不想显示项目的分数,因为它看起来很难看。

我已经尝试将高度设置为10 * item height,并考虑边框,边距和填充,但还有其他因素 - 例如实际边框有1像素填充。即使考虑到尺寸偏差几个像素。这个解决方案只是等待爆炸。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

使用行为来做。

行为允许您在Xaml中向控件添加功能。这是一个教程:Behaviors Tutorial

让您了解代码中的内容:

的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”的属性将填充您的控件。您现在可以绑定到控件,其数据,事件等,并根据需要对其进行操作。

执行所需操作的一种方法是从列表框中获取数据并将其存储在行为中,然后重新绑定前10个记录。一旦用户滚动到第10位,您就可以开始向列表添加新项目(或根据需要操作列表)。

要获取行为,您需要下载Expression Blend并获取System.Windows.Interactivity dll。一旦你拥有它,你可以卸载Blend。

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