我有一个奇怪的行为VirtualizingStackPanel
。我有一个包含TextBlock
和TextWrap="Wrap"
的项目列表。下面是代码:VirtualizingStackPanel和TextWrapping错误? Windows Phone
<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
事件,并检查它是否是Inertial
,如果这样就意味着滚动和我焦点设置到页面:
void messagesList_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
{
if (e.IsInertial)
this.Focus();
}
附:谢谢你的好运祝福;)
OFF_TOPIC:在VK比赛好运=) – 2012-08-17 08:42:17