首页 > 其他分享 >WPF实现ListBox滚动条自动定位至最底部

WPF实现ListBox滚动条自动定位至最底部

时间:2022-12-14 23:45:41浏览次数:36  
标签:Items AssociatedObject 行为 ICollectionView 滚动条 CollectionChanged WPF ListBox List

摘要

在有些场景下为了提升用户体验可能需要自动定位数据至最新的地方,比如实时运行日志、表格最新添加的数据记录等等,这种其实都可以使用WPF中的Behavior(行为)来进行实现,当然你硬要直接在后台事件处理也不是不行,封装成行为之后代码更简洁且可以共用。

示例代码

废话不多说直接上代码

1、实现一个Listbox滚动至最底部的行为

/// <summary>
    /// ClassName:  ListBoxScrollToBottomBehavior
    /// Description:列表框滚动条行为
    /// Author:     luc
    /// CreatTime:  2022/12/12 18:11:48  
    /// </summary>
    public class ListBoxScrollToBottomBehavior:Behavior<ListBox>
    {
        protected override void OnAttached()
        {
            base.OnAttached();
            ((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]);
            }
        }
    }

原理很简单,就是通过AssociatedObjectScrollIntoView方法滚动至集合项的总数-1就是最后1行底部了。

Tips:需要注意的是,传入的行为泛型必须是ICollectionView类型的才可以,因为这里是通过触发ICollectionViewCollectionChanged事件进行处理操作的。

2、在XAML页面上使用行为

//导入自己封装的行为所在位置
xmlns:beavior="clr-namespace:xxxxx.Extensions.Behaviors"
//导入微软的行为类库
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"

<i:Interaction.Behaviors>
                                <beavior:ListBoxScrollToBottomBehavior />
                            </i:Interaction.Behaviors>

那有的同学又要问了,如果要自动定位至顶部呢?那不是更简单,要学会举一反三,直接定位到数据下标为0的位置就是第一行也就是顶部了

image-20221214232940566

那还有同学要问了,如果是DataGrid,ListView咋整呢?其实还是一样的,换汤不换药,Behavior是一个泛型,可传入不同的DependencyObject对象类型

image-20221214233503459

效果

1

标签:Items,AssociatedObject,行为,ICollectionView,滚动条,CollectionChanged,WPF,ListBox,List
From: https://www.cnblogs.com/chonglu/p/16983979.html

相关文章

  • [WPF] 使用 MVVM Toolkit 构建 MVVM 程序
    1.什么是MVVMToolkit模型-视图-视图模型(MVVM)是用于解耦UI代码和非UI代码的UI体系结构设计模式。借助MVVM,可以在XAML中以声明方式定义UI,并使用数据绑......
  • WPF使用WindowChrome自定义标题栏
    第一步:基本实现添加Window的Style定义,并设置WindowChrome.WindowChrome属性;设置WindowChrome标题栏:CaptionHeight——主要用于拖动有效区;GlassFrameThickness——影......
  • 如何在博客中加入带滚动条的文本框
    博客编辑页面输入以下样式,然后在</dev>之前输入文本。<divstyle="color:#000000;font-size:6px;background-color:#FFFFFF;border:solid1px#aaaaaa;width:aut......
  • WPF 系列-01默认程序结构
    WPF应用程序启动项创建一个WPF应用程序,系统为我们自动生成了App.xaml和一个普通的MainWindow.xaml窗体文件。App.xaml和cs文件文件如下:<Applicationx:C......
  • WPF 系列-01默认程序结构
    WPF应用程序启动项创建一个WPF应用程序,系统为我们自动生成了App.xaml和一个普通的MainWindow.xaml窗体文件。App.xaml和cs文件文件如下:<Applicationx:C......
  • wpf WebView2 打印
    如果想要在wpf中使用浏览器的打印功能如何实现呢?可以选择CefSharp。但是CefSharp打包的程序似乎是包含浏览器内核,导致程序包太大。现在用WebView2试试。<Grid><Grid.......
  • TitleTips Support for Edit, ListBox and ComboBox Controls
    TitleTipsSupportforEdit,ListBoxandComboBoxControls Download1.10demoprojectsincludingDLLproject-230.36KBDownloadDLLbinariesfor......
  • WPF TabControl 简单样式自定义
    WPFTabControl 简单样式自定义,覆写控件模版,在此记录下1<!--SimpleStyles:TabControl-->2<StyleTargetType="{x:TypeTabControl}">......
  • 使用DevExpress WPF主题设计器轻松创建Office 2019绿色主题(二)
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专......
  • WPF E 文章汇总
    MSDN"WPF/E"(codename)DevCenter:​​http://msdn2.microsoft.com/en-us/asp.net/bb187358.aspx​​​对网上的WPF/E文章汇总,前一部分来自​​思归​​的​​WPF/E......