Ich habe ein seltsames Verhalten mit VirtualizingStackPanel
. Ich habe eine Liste mit Artikeln, die TextBlock
mit TextWrap="Wrap"
enthält. Hier ist der Code:VirtualizingStackPanel und TextWrapping Fehler? 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>
Es funktioniert ziemlich gut, aber wenn ich versuche, sehr schnell blättern (mit der Maus auf Emulator, nicht prommatically) gibt es einige in scroll hinken, wahrscheinlich HorizontallOffset
berechnet manchmal falsch, und in der unten endet mit sehr seltsamen Ergebnis (siehe Bild, rechtes Bild zeigt normales Verhalten).
Nach Forschung dachte ich VirtualizingStackPanel
dieses Problem in Kombination und TextBlock.TextWrap="Wrap"
, wenn ich von diesem Paar ein Element entfernen Sie alle korrekt funktioniert.
Aber ich brauche Virtualisierung wegen großer Artikel zählen, und TextWrap
für die korrekte Textanzeige.
Also denke ich darüber nach, meine eigene Implementierung des Virtualisierungspanels zu machen, kannst du mir bitte zeigen, wie man das macht oder wie man das aktuelle Problem löst?
UPD: Das Problem: (!)
auf den ersten beiden Bilder ListBox
ist bereits gescrollt zum Boden (es nicht mehr nach unten gescrollt werden kann), sondern Elemente falsch platziert, korrekte Platzierung auf der rechten Seite Bild. Dies passiert nur, wenn Sie sehr schnell scrollen.
UPD2: Danke an Milan Aggarwal. Er lieferte einen guten Fall meines Problems here. Scheint wirklich ein Bug in ListBox
zu sein. Problemumgehung, die zur Verfügung gestellt wird, passt nicht in mein Szenario, weil ich mit Steuerelementen innerhalb ListBox
Element interagieren muss. Jetzt versuche ich ManipulationCompleted
Ereignis zu fangen und überprüfen, ob es Inertial
ist, wenn so scroll das bedeutet und ich auf Seite konzentrieren:
void messagesList_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
{
if (e.IsInertial)
this.Focus();
}
P. S. danke für viel Glück wünscht;)
OFF_TOPIC: Viel Glück im VK Wettbewerb =) –