我试图强制 ListBox 显示均匀数量的元素 - 也就是说,如果有超过 10 个元素,我希望它恰好显示10 个元素,并通过滚动使其他元素可用。我知道的唯一示例是 Visual Studio 智能感知弹出窗口。
我不想显示部分项目,因为它看起来很难看。
我尝试将高度设置为10 * item height
,并考虑边框、边距和填充,但还有其他因素 - 例如实际边框具有 1 个像素的填充。即使考虑到尺寸也会偏离几个像素。这个解决方案正在等待爆炸。
有任何想法吗?
谢谢!
使用行为来做到这一点。
行为允许您在 Xaml 中向控件添加功能。这是一个教程:行为教程
为了让您了解这在代码中的样子:
xml:
<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)
{
....
}
}
发生的情况是 Behavior 绑定到控件并使用 OnAttached() 方法通知您。发生这种情况时,您会发现 Behavior 上的一个名为“AssociatedObject”的属性填充了您的控件。您现在可以绑定到控件、其数据、事件等,并根据需要对其进行操作。
做你想做的事情的一种方法是从列表框中获取数据并将其存储在行为中,然后重新绑定前 10 条记录。一旦用户滚动到第 10 个,您就可以开始向列表中添加新项目(或根据需要操作列表)。
要获得行为,您需要下载 Expression Blend 并获取 System.Windows.Interactivity dll。拥有它后,您可以卸载 Blend。
行为是以模块化和一致的方式向控件添加额外功能的好方法。