Tengo un comportamiento extraño con VirtualizingStackPanel
. Tengo una lista con los artículos que contiene TextBlock
con TextWrap="Wrap"
. Aquí está el código:¿Error de VirtualizingStackPanel y 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>
Funciona bastante bien, pero si trato de desplazarse muy rápido (a través del ratón en el emulador, no prommatically) hay algo de retraso en el desplazamiento, probablemente HorizontallOffset
veces calcula mal, y en el abajo en los extremos con resultados muy extraños (ver imagen, la imagen de la derecha demuestra un comportamiento normal).
Después de la investigación me di cuenta de que el problema en combinación VirtualizingStackPanel
y TextBlock.TextWrap="Wrap"
, si quito uno de los elementos de esta pareja todo funciona correctamente.
Pero necesito virtualización debido a la cantidad de elementos grandes y TextWrap
para la visualización correcta del texto.
Así que pienso en hacer mi propia implementación de Virtualizing Panel, ¿pueden guiarme, cómo hacerlo o cómo solucionar el problema actual?
UPD: El problema: (!)
en las dos primeras imágenes ListBox
ya está desplazado a la parte inferior (no se puede desplazar hacia abajo más), pero los elementos coloca de forma incorrecta, correcta colocación muestra a la derecha imagen. Esto sucede solo si se desplaza muy rápido.
UPD2: Gracias a Milan Aggarwal. Proporcionó un buen caso de mi problema here. Parece que es realmente un error en ListBox
. Solución alternativa, siempre que no se ajuste a mi escenario, porque necesito interactuar con los controles dentro del elemento ListBox
. Ahora estoy tratando de recuperar ManipulationCompleted
evento y comprobar si es Inertial
, si por lo que significa de desplazamiento y ajustar el enfoque a la página:
void messagesList_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
{
if (e.IsInertial)
this.Focus();
}
P. S. gracias por deseos de buena suerte;)
OFF_TOPIC: Buena suerte en el concurso de VK =) –