WPF ListView的改变滚动速度(WPF change ListView scroll spe

2019-10-23 07:31发布

我有一个ListView有定制的细胞(项目)。

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

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

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

首先,当列表自动滚动到这个消息,一个白色的大空间出现在项目下一路下跌到我的底部ListView 。 见图片:

当消息很短(单行):

其次,在所有情况下,滚动速度是远远快。 单谅解备忘录轮“中风”(在你滚动你的手指的感觉)将太快移动滚动条:多达4个的小消息滚动! 这太多了 !

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

[UPDATE 1]

通过@CurtisHx我的请求ListView XAML是如下:

http://pastebin.com/FFZGhi6w

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

Answer 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的东西合理。 这应该可以解决快速滚动速度。

文本对齐

文本正在被正确对齐。 目前,父容器限制的宽度TextBlocksTextBlocks将包裹文本之前填满所有的水平间距它可以的。 因此,对于长的消息,该TextBlock会水平,直至碰到父容器的范围扩大。

为了得到交错文本,邮件的宽度必须小于宽度ListView 。 如果扩大窗口,你会看到成为交错的文本。 下面是一个代码SNIPPIT,指出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>



文章来源: WPF change ListView scroll speed