1. 程式人生 > 其它 >WPF使用行為(Behavior)實現ListBox滾動條自動滾動

WPF使用行為(Behavior)實現ListBox滾動條自動滾動

前言

在做一個日誌面板時,當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>

效果