wpf - ListBox con ItemTemplate(y ScrollBar!)
xaml (4)
ListBox intentará expandirse en altura, que está disponible ... Cuando estableces la propiedad Height de ListBox obtienes un scrollviewer que realmente funciona ...
Si desea que su ListBox corresponda a la altura disponible, es posible que desee intentar regular la altura desde sus controles principales. En una cuadrícula, por ejemplo, configurar la altura en Auto en su RowDefinition podría hacer el truco ...
HTH
Tengo un ListBox enlazado a datos y enumerado por elementos:
<ListBox x:Name="lbLista"
ScrollViewer.VerticalScrollBarVisibility="Visible">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding Deleteable, Mode=TwoWay}" />
<Label Content="{Binding Name}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Los ites se muestran bien y provienen de una ObservableCollection.
El problema es la barra de desplazamiento que aparece pero que no se puede usar, no tiene un asa para agarrar. He intentado configurar algunas propiedades adjuntas de ScrollView en ListBox, pero no afectan la situación.
Nunca he tenido suerte con ningún contenido desplazable dentro de un stackpanel (algo derivado de ScrollableContainer. El stackpanel tiene un mecanismo de diseño extraño que confunde los controles secundarios cuando se completa la operación de medición y encontré que el tamaño vertical termina infinito, por lo tanto no restringido - Así que va más allá de los límites del contenedor y termina recortado. La barra de desplazamiento no se muestra porque el control cree que tiene todo el espacio del mundo cuando no lo hace.
Siempre debe colocar el contenido desplazable dentro de un contenedor que pueda resolverse a una altura conocida durante su operación de diseño en tiempo de ejecución para que las barras de desplazamiento se dimensionen adecuadamente. El contenedor principal en el árbol visual debe poder resolverse a una altura real, y esto sucede en la cuadrícula si establece el alto de RowDefinition o en automático o fijo.
Esto también ocurre en Silverlight.
-em-
Pegué el código en el proyecto de prueba, agregué alrededor de 20 elementos y obtuve barras de desplazamiento útiles, no hay problema, y funcionan como se esperaba. Cuando solo agrego un par de elementos (de modo que el desplazamiento no es necesario) no obtengo una barra de desplazamiento utilizable. ¿Podría este ser el caso? que no estás agregando suficientes elementos?
Si quita ScrollViewer.VerticalScrollBarVisibility="Visible"
, las barras de desplazamiento solo aparecen cuando las necesita.
Thnaks por respuesta. Lo intenté yo mismo también para un Proyecto Vacío y, he aquí, todopoderoso creador del cielo y siete mares, funcionó. Originalmente tenía ListBox dentro de la cual estaba dentro de root. ¡Por alguna razón, a ListBox no le gusta estar dentro de StackPanel, en absoluto! =)
-pom-