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>

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

相关推荐
程序员敲代码吗4 小时前
如何通过命令行启动COMSOL的参数化、批处理和集群扫描
java·c#·bash
缺点内向6 小时前
C#: 告别繁琐!轻松移除Word文档中的文本与图片水印
c#·自动化·word·.net
喵叔哟6 小时前
06-ASPNETCore-WebAPI开发
服务器·后端·c#
2501_930707787 小时前
使用 C# .NET 从 PowerPoint 演示文稿中提取背景图片
c#·powerpoint·.net
初级代码游戏7 小时前
套路化编程 C# winform 自适应缩放布局
开发语言·c#·winform·自动布局·自动缩放
大空大地20268 小时前
流程控制语句--switch多分支语句使用、while循环语句的使用、do...while语句、for循环
c#
kylezhao201910 小时前
C#序列化与反序列化详细讲解与应用
c#
JQLvopkk10 小时前
C# 实践AI :Visual Studio + VSCode 组合方案
人工智能·c#·visual studio
故事不长丨10 小时前
C#线程同步:lock、Monitor、Mutex原理+用法+实战全解析
开发语言·算法·c#
kingwebo'sZone10 小时前
C#使用Aspose.Words把 word转成图片
前端·c#·word