2011-09-21 20 views
5

Tengo un listbox que quiero ocupar el ancho de mi ventana, y los elementos del list box se extenderán al tamaño del listbox.Elemento Listbox que se extiende al ancho del listbox PERO no más allá del ancho

Cada elemento de cuadro de lista será una plantilla de datos que tiene aproximadamente 150 ancho para información y el tamaño restante para ser un cuadro de texto para una descripción. Quiero que la descripción texbox se extienda al tamaño disponible restante. Así que aquí es ejemplo xaml que pensé que crear este diseño:

<Window x:Class="test.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <ListBox Margin="20,20,20,20" ItemsSource="{Binding Path=List}"> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="HorizontalContentAlignment" 
        Value="Stretch" /> 
     </Style> 
    </ListBox.ItemContainerStyle> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Border BorderBrush="AliceBlue" 
        BorderThickness="1"> 
       <Grid> 
       <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="150" /> 
       <ColumnDefinition Width="*" /> 
       </Grid.ColumnDefinitions> 
       <Label Width="20" 
         Content="Test" /> 
       <ComboBox Width="130" /> 
       <TextBox Grid.Column="1" 
          HorizontalAlignment="Stretch" 
          HorizontalContentAlignment="Stretch" /> 
       </Grid> 
      </Border> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
    </ListBox> 

Sin embargo, cuando escribo en el cuadro de texto y el ancho de texto va más allá de la anchura del cuadro de lista, el elemento de cuadro de lista sigue creciendo y aparece la barra de desplazamiento horizontal.

Lo que quiero lograr es el ancho máximo del cuadro de texto para ir solo hasta el cuadro de lista y no agrandarlo. Alguien sabe cómo puedo lograr este diseño?

Respuesta

6

Intenta agregar ScrollViewer.HorizontalScrollBarVisibility="Disabled" a ListBox, funcionó para mí.

+0

Eso funcionó perfectamente, muchas gracias! – cab

2

El problema es que su Listbox contiene un scrollviewer, lo que significa que sus hijos pueden tener cualquier tamaño que quieran, el visor de desplazamiento se encargará de eso. Tu ColumnDefinition prácticamente dice "Usa todo el espacio ilimitado que tenemos". Una solución que viene a la mente sería la de obligar a la Grids Ancho al cuadro de lista ActualWidth

Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}, Path=ActualWidth}" 

pero además probablemente una mejor solución es Dmitrys.

Cuestiones relacionadas