wpf控件Expander集合下的像素滚动

项目场景:Expander集合滚动

如下图,有一个Expander集合,且设置 ScrollViewer.VerticalScrollBarVisibility = "Auto"

每个Expaner下包含有若干元素,当打开Expader(即IsExpanded = "true")时,集合右侧会出现滚动条,用户拉动滚动条来浏览集内容。


问题描述:每次滚动跳转太多

如下图所示,当用户滚轮下滑时,每次滚动了一个Expander(也就是一个集合的项------Expaner),这显然不是想要的。


原因分析:

当出现滚轮时,实际上创建了一个VirtualizingPanel,这是WPF为了优化性能做的事情,这里不深入探讨。VirtualizingPanel有个附加属性ScrollUnit,通过反编译可知(也可以查看微软官方文档),它是一个枚举,有两种模式。

csharp 复制代码
  public enum ScrollUnit
  {
	    Pixel,
	    Item,
  }

解决方案:

设置附加属性:VirtualizingPanel.ScrollUnit="Pixel"

csharp 复制代码
   <ListBox
       HorizontalAlignment="Stretch"
       VerticalAlignment="Stretch"
       Background="Transparent"
       BorderThickness="0"
       ScrollViewer.VerticalScrollBarVisibility="Auto"
       ScrollViewer.HorizontalScrollBarVisibility="Disabled"
       VirtualizingPanel.ScrollUnit="Pixel"
       VirtualizingPanel.VirtualizationMode="Recycling"
       ItemsSource="{Binding MyItemCollection}">
       <ListBox.ItemContainerStyle>
           <Style TargetType="{x:Type ListBoxItem}">
               <Setter Property="Template">
                   <Setter.Value>
                       <ControlTemplate>
                           <Expander Header="{Binding Ip, Mode=OneWay}" HeaderHeight="26">
                               <ContentPresenter Content="{Binding}" />
                           </Expander>
                       </ControlTemplate>
                   </Setter.Value>
               </Setter>
           </Style>
       </ListBox.ItemContainerStyle>
   </ListBox>

解决后效果,如下,非常丝滑

相关推荐
微小冷1 小时前
WPF中ListView控件详解
c#·wpf·数据绑定·listview·bingding
妙妙屋(zy)4 小时前
.Net Minimal APIs实现动态注册服务
c#·.net
全栈小54 小时前
【C#】实体类定义的是long和值识别到的是Int64,实体类反射容易出现Object does not match target type
c#
唐青枫16 小时前
C#.NET BackgroundService 详解
c#·.net
深度混淆16 小时前
C#,List<T> 与 Vector<T>
开发语言·c#·vector·list·simd
深度混淆17 小时前
C#,Parallel并行多线程计算,使用专门的Concurrent系列数据集
开发语言·c#·多线程·并行处理
心疼你的一切17 小时前
Unity 多人游戏框架学习系列一
学习·游戏·unity·c#·游戏引擎
枯萎穿心攻击1 天前
响应式编程入门教程第三节:ReactiveCommand 与 UI 交互
开发语言·ui·unity·架构·c#·游戏引擎·交互
86Eric1 天前
C# 入门教程(三):详解字段、属性、索引器及各类参数与扩展方法
学习·c#·传参·扩展方法·属性,字段·输出参数
专注VB编程开发20年1 天前
WPF,Winform,HTML5网页,哪个UI开发速度最快?
大数据·c#·wpf