2011-10-28 7 views
10
<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="Auto"/> 
    <ColumnDefinition /> 
</Grid.ColumnDefinitions> 

<Grid.RowDefinitions> 
    <RowDefinition Height="Auto"/> 
    <RowDefinition/> 
    <RowDefinition Height="40"/> 
</Grid.RowDefinitions> 

<c:SearchTextBox Grid.ColumnSpan="2" .../> 

<ScrollViewer VerticalScrollBarVisibility="Auto" Grid.Row="1"> 
    <ListBox 
    ItemsSource="{Binding Categories}" 
    IsSynchronizedWithCurrentItem="True" 
    ... /> 
</ScrollViewer> 

<!-- Here is what I'm talking about:--> 
<ListBox ItemsSource="{Binding Products}" 
    IsSynchronizedWithCurrentItem="True" Grid.Column="1" Grid.Row="1"> 
    <ListBox.ItemsPanel> 
    <ItemsPanelTemplate> 
     <WrapPanel /> 
    </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox> 

Lo que quiero es que los artículos en la columna de la derecha deben disponerse para llenar ancho de la ventana, y luego crear una nueva línea , eso es exactamente para lo que está hecho WrapPanel.
El problema es que el WrapPanel establece los elementos en una sola línea que muestra una barra de desplazamiento horizontal debajo mientras que todos los elementos están "ocultos" en el lado derecho que excede el tamaño de la ventana.WrapPanel expone artículos en una línea horizontal larga (que muestran barras de desplazamiento) en lugar de ajustar líneas

¿Cómo puedo evitar eso?

+0

¿Qué sucede si elimina el scrollviewer? ¿los artículos aún se expanden hacia la derecha con un desplazamiento horizontal? – dcarneiro

+0

@Daniel me entendiste mal ScrollViewer envuelve el primer ListBox. Hay 2 ListBoxes que representan un escenario de detalles maestros. El problema es con 2nd ListBox que usa WrapPanel como su ItemsPanelTemplate. – Shimmy

Respuesta

15

Debe desactivar la barra de desplazamiento horizontal del segundo ListBox.

<ListBox ItemsSource="{Binding}" 
     ScrollViewer.HorizontalScrollBarVisibility="Disabled" ...> 
.... 
</ListBox> 

EDITAR

Addtionally, no hay razón por la que se utiliza por primera ScrollViewer ListBox? Por qué lo pregunto es que ListBox ya tiene ScrollViewer internamente, cuya visibilidad predeterminada es Auto.

+4

Para aclarar por qué sucede esto, si el 'ListBox' tiene barras de desplazamiento horizontales habilitadas (que son por defecto), entonces le dice a sus hijos que se midan en un espacio horizontal infinito. Al eliminar las barras de desplazamiento, fuerza al 'WrapPanel' a utilizar un ancho finito y, por lo tanto, se ajustará. –

+0

@SteveGreatrex: Gracias por su comentario. –

Cuestiones relacionadas