前言
在做一個(gè)日志面板時(shí),當(dāng)ListBox被裝滿,我們需要手動(dòng)去滾動(dòng)進(jìn)度條,才能看到最新的信息,所以我需要讓它實(shí)現(xiàn)自動(dòng)滾動(dòng),實(shí)現(xiàn)并不難,最主要的其實(shí)就是拿到總行數(shù)減去1。但在WPF中一般情況下是避免直接對(duì)控件進(jìn)行操作的,實(shí)現(xiàn)也有好幾種,這里記錄一下我使用Behavior實(shí)現(xiàn)的過(guò)程。
代碼實(shí)現(xiàn)
CS:
public class ListBoxScrollToBottomBehavior : Behavior<ListBox>
{
protected override void OnAttached()
{
base.OnAttached();
//ICollectionView類型才有CollectionChanged事件
((ICollectionView)AssociatedObject.Items).CollectionChanged += ListBoxScrollToBottomBehavior_CollectionChanged;
}
protected override void OnDetaching()
{
base.OnDetaching();
((ICollectionView)AssociatedObject.Items).CollectionChanged -= ListBoxScrollToBottomBehavior_CollectionChanged;
}
private void ListBoxScrollToBottomBehavior_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (AssociatedObject.HasItems)
{
AssociatedObject.ScrollIntoView(AssociatedObject.Items[AssociatedObject.Items.Count - 1]);
}
}
}
XAML:
添加??interactivity?
?命名空間
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
在控件內(nèi)部使用
<i:Interaction.Behaviors>
<behavior:ListBoxScrollToBottomBehavior />
</i:Interaction.Behaviors>
效果
?
?
?
?
本文摘自 :https://blog.51cto.com/u