WPF使用行為(Behavior)實現ListBox滾動條自動滾動
阿新 • • 發佈:2021-07-15
前言
在做一個日誌面板時,當ListBox被裝滿,我們需要手動去滾動進度條,才能看到最新的資訊,所以我需要讓它實現自動滾動,實現並不難,最主要的其實就是拿到總行數減去1。但在WPF中一般情況下是避免直接對控制元件進行操作的,實現也有好幾種,這裡記錄一下我使用Behavior實現的過程。
程式碼實現
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"
在控制元件內部使用
<i:Interaction.Behaviors>
<behavior:ListBoxScrollToBottomBehavior />
</i:Interaction.Behaviors>