我有ListView
个定制单元格(项目)。
此ListView
表示两个人与我的应用程序交换消息的对话。每次添加消息时,对话都会自动滚动到最后一个项目。
我面临一些“奇怪”的问题:
当用户写一条相当长的消息(比如10行)时,它几乎可以占据整个屏幕(意味着分配给ListView
的空间),这当然是正常的,但滚动是有点破碎。
首先,当列表自动滚动到此消息时,项目下方会显示一个大的空白区域,一直到我ListView
的底部。见图:
当消息很短(单行)时:
其次,在所有情况下,滚动速度都是快速的。单个mous轮“笔划”(滚动时手指的感觉)会使滚动条移动得太快:滚动最多4条小信息!太多了!
所以问题是:如何控制滚动速度?如何放慢速度?为什么会有这么大的白色空间?谢谢你的帮助!
@CurtisHx要求ListView XAML
如下:
我希望这有助于理解我的问题!
答案 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>