我有一個奇怪的行爲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