<ListBox x:Name="messagesList" ItemsSource="{Binding Messages}" > <ListBox.ItemContainerStyle> <Style targettype="ListBoxItem"> <Setter Property="HorizontalContentAlignment" Value="Stretch" /> </Style> </ListBox.ItemContainerStyle> <ListBox.ItemTemplate> <DataTemplate> <StackPanel> <toolkit:ContextMenuService.ContextMenu> <toolkit:ContextMenu> ... </toolkit:ContextMenu> </toolkit:ContextMenuService.ContextMenu> <CheckBox Style="{Binding Own,Converter={StaticResource MsgTypetoStyle}}" Tag="{Binding TimeString}" IsEnabled="True"> <TextBlock Text="{Binding Content}" textwrapping="Wrap"/> </CheckBox> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
它的工作相当不错,但如果我尝试滚动非常快(使用鼠标在模拟器,而不是prommatically)有一些滞后的滚动,可能HorizontallOffset有时计算错误,在底部的结尾非常奇怪的结果(见图像,右图像演示了正常行为).
经过研究,我发现这个问题在组合VirtualizingStackPanel和TextBlock.textwrap =“Wrap”,如果我从这对夫妇中删除一个元素都可以正常工作.
但是我需要虚拟化,因为大项目数量,textwrap正确显示文本.
所以我想自己实现虚拟化面板,你可以引导我,怎么做,还是如何解决当前的问题?
UPD:问题:
在前两个图像上,ListBox已经(!)滚动到底部(不能再向下滚动),但是元素放置不正确,正确的放置显示在右边的图像上.只有当您滚动的时候才会发生这种情况.
UPD2:感谢米兰Aggarwal.他提供了一个很好的例子我的问题here.似乎这是一个在ListBox的错误.提供的解决方法不适合我的场景,因为我需要与ListBox项目中的控件进行交互.
现在我正在尝试捕获ManipulationCompleted事件,并检查它是否是惯性的,如果这样就意味着滚动并设置焦点到页面:
void messagesList_ManipulationCompleted(object sender,ManipulationCompletedEventArgs e) { if (e.IsInertial) this.Focus(); }
附:感谢祝你好运祝福;)
解决方法
我也觉得你正在面对这个问题http://blog.rsuter.com/?p=258.我想这将使用虚拟化本身来解决.希望它有帮助
原文地址:https://www.jb51.cc/csharp/97369.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。