40 votos

¿Cómo puedo obtener una barra de desplazamiento vertical en mi ListBox?

En el ejemplo siguiente, tengo un ListBox con decenas de nombres de fuente.

Yo habría pensado que sería automáticamente una barra de desplazamiento vertical en él de modo que usted puede seleccionar CUALQUIER fuente, no sólo de las primeras en la lista, pero no es así.

Así que he añadido un "ScrollViewer" y que pone un "área de barra de desplazamiento" en el derecho, pero no hay ninguna barra de desplazamiento en la barra de desplazamiento de la zona de manera que puede desplazarse (!).

¿Por qué no una barra de desplazamiento automático, y cómo me obliga a tener una barra de desplazamiento?

<StackPanel Name="stack1">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="2*"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
        <ScrollViewer>
            <ListBox Grid.Row="0" Name="lstFonts" Margin="3"  ItemsSource="{x:Static Fonts.SystemFontFamilies}"/>
        </ScrollViewer>
    </Grid>
</StackPanel>

83voto

JaredPar Puntos 333733

El problema con su solución es que estás poniendo una barra de desplazamiento en un cuadro de lista donde probablemente desee poner dentro del ListBox.

Si desea forzar una barra de desplazamiento en el cuadro de lista, utilice la propiedad adjunta ScrollBar.VerticalScrollBarVisibility.

<ListBox 
    ItemsSource="{Binding}" 
    ScrollViewer.VerticalScrollBarVisibility="Visible">
</ListBox>

Establecer este valor emergente voluntad automáticamente la barra de desplazamiento según sea necesario.

13voto

Edward Tanguay Puntos 43219

He añadido una "altura" a mi cuadro de lista y agrega la barra de desplazamiento muy bien.

8voto

yossharel Puntos 609

ListBox ya contiene ScrollViewer. Por defecto, el ScrollBar se mostrará cuando hay más de contenido que de espacio.

Para calcular esta condición, el tamaño debe ser conocido. Asegúrese de que su lista tiene tamaño. Usted no tiene que ajustar el tamaño explícitamente en el cuadro de lista, el tamaño puede venir desde el panel principal.

En caso de que el panel principal es vertical StackPanel y desea VerticalScrollBar debe establecer la Altura en ListBox sí.

3voto

Paras Puntos 31

Barra de desplazamiento se agrega al cuadro de lista automáticamente a menos que su visibilidad es oculto. Cuando el tamaño de elementos de la lista sobrepasa el uno, que puede demostrarse dentro de un cuadro de lista vertical o cuadro de lista horizontal puede ser visto durante el tiempo de ejecución.

1voto

oldDavid Puntos 31

En mi caso el número de elementos en el ListBox es dinámico por lo que no quiero usar la propiedad Height. En su lugar utilicé MaxHeight y funciona muy bien. La barra de desplazamiento aparece cuando llena el espacio que he asignado para él.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X