• 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>
    

    效果

    1

  • 相关阅读:
    指针类型
    集合类型
    VMware打开虚拟机没反应的解决方案(全面汇总)
    redis主从|哨兵|集群模式
    MYSQL一次千万级连表查询优化
    StackExchange.Redis通用封装类分享
    Redis-五种数据类型解析
    Redis并发问题
    C#委托和事件
    Invoke 和 BeginInvoke 的区别
  • 原文地址:https://www.cnblogs.com/chonglu/p/15015909.html
Copyright © 2020-2023  润新知