WPF更改ListView滚动速度

时间:2015-06-09 16:42:48

标签: c# wpf xaml listview scrollbar

我有ListView个定制单元格(项目)。

ListView表示两个人与我的应用程序交换消息的对话。每次添加消息时,对话都会自动滚动到最后一个项目。

我面临一些“奇怪”的问题:

当用户写一条相当长的消息(比如10行)时,它几乎可以占据整个屏幕(意味着分配给ListView的空间),这当然是正常的,但滚动是有点破碎

首先,当列表自动滚动到此消息时,项目下方会显示一个大的空白区域,一直到我ListView的底部。见图:Example whith big message and big white space

当消息很短(单行)时: Example with short messages

其次,在所有情况下,滚动速度都是快速的。单个mous轮“笔划”(滚动时手指的感觉)会使滚动条移动得太快:滚动最多4条小信息!太多了!

所以问题是:如何控制滚动速度?如何放慢速度?为什么会有这么大的白色空间?谢谢你的帮助!

[更新1]

@CurtisHx要求ListView XAML如下:

http://pastebin.com/FFZGhi6w

我希望这有助于理解我的问题!

1 个答案:

答案 0 :(得分:1)

ScrollViewer.CanContentScroll="False"上设置ListView的一种方法。 https://social.msdn.microsoft.com/Forums/vstudio/en-US/47bd6a75-7791-4c0f-93ae-931e9a6540e7/smooth-scrolling-on-listbox?forum=wpf

您将在ListView上放弃虚拟化,因此请将ListView中的元素数量保持在合理的范围内。这应该可以确定快速滚动速度。

文字对齐

文本正确对齐。目前,父容器限制TextBlocks的宽度。在包装文本之前,TextBlocks将填充它可以包含的所有水平空间。因此,对于长消息,TextBlock将水平扩展,直到达到父容器的限制。

为了获得交错的文本,消息的宽度必须小于ListView的宽度。如果你加宽窗口,你会看到文本交错。下面是一段代码,指出需要宽度限制的TextBlock

<ListView x:Name="ConversationList" ScrollViewer.IsDeferredScrollingEnabled="False" ScrollViewer.CanContentScroll="False" ScrollViewer.VerticalScrollBarVisibility="Auto"
            BorderBrush="Transparent" Grid.Row="0" ScrollViewer.HorizontalScrollBarVisibility="Disabled" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0,0,10,10">
     <!-- Big Snip /!-->
     <ListView.ItemTemplate>
        <DataTemplate>
           <!-- Snip /!-->
           <Border Padding="0, 15, 0, 15">
              <Grid x:Name="ConversationBubble">
                 <Grid.RenderTransform>
                    <TranslateTransform />
                 </Grid.RenderTransform>
                 <Border Margin="70, 5, 70, 5" HorizontalAlignment="{Binding Alignment}" BorderBrush="#ECECEC" Visibility="Visible" Background="#F1F1F2"  Padding="10">
                    <StackPanel>