2009-01-20 18 views
17

Im tratando de definir un dataTemplate para un objeto comercial en mi aplicación wpf, una colección de la cual está vinculada a un ListBox.control de frontera wpf para abarcar el ancho de listboxItem

<UserControl.Resources> 
    <DataTemplate x:Key="ResizedItemsDataTemplate" DataType="{x:Type resizer:ResizeMonitorItem}"> 
       <Border x:Name="bdr" BorderBrush="Blue" 
            BorderThickness="1" 
            CornerRadius="2" 
            Width="auto" 
            HorizontalAlignment="Stretch" 
            VerticalAlignment="Stretch"> 
        <Grid Margin="2"> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="14"></RowDefinition> 
          <RowDefinition Height="14"></RowDefinition> 
         </Grid.RowDefinitions> 


         <TextBlock Grid.Row="0" Text="{Binding SaveAsFileName}"></TextBlock> 
         <TextBlock Grid.Row="1" Text="{Binding ResizedImageFilePath}"></TextBlock> 
        </Grid> 
      </Border> 
    </DataTemplate> 
</UserControl.Resources> 
<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="0">  
    <Border BorderThickness="0,0,0,5" BorderBrush="DarkGray" > 
     <ListBox x:Name="ListBoxResizeItems" ItemsSource="{Binding Path=ResizeItems}" BorderThickness="0" ItemTemplate="{DynamicResource ResizedItemsDataTemplate}"> 
     </ListBox> 
    </Border> 
</Grid> 

¿Cómo puedo obtener la frontera definida con x: Name = BDR para abarcar todo el ancho de cada elemento de cuadro de lista? Por el momento, solo se expande dentro de los bloques de texto que no necesitan llenar todo el ancho del elemento de cuadro de lista y también varían para cada elemento de cuadro de lista.

Respuesta

52

Esto probablemente tiene más que ver con que los ListBoxItems no ocupen todo el ancho de ListBox. Agregue el atributo HorizontalContentAlignment="Stretch" a su ListBox y vea si estira los elementos individuales para llenar el ancho.

+0

Niza. No sabía acerca de esa propiedad. Lástima que el valor predeterminado sea Left en lugar de Stretch, lo que conduce a este comportamiento. – Gishu

+0

Impresionante, tuve exactamente el mismo problema y esto lo resolvió. – vargonian

+0

Disco, sabía de esa propiedad pero todavía era nuevo en WPF y esto hizo exactamente lo que yo quería. ¡Gracias! –

1

Lo resolvió. El truco consiste en establecer HorizontalContentAlignment = "Stretch" en el cuadro de lista para que su contenido se extienda por todo el ancho en lugar de ajustarlo únicamente a los contenidos.

<ListBox x:Name="ListBoxResizeItems" 
       HorizontalContentAlignment="Stretch" 
       ItemsSource="{Binding Path=ResizeItems}" 
       BorderThickness="0"           
       ItemTemplate="{DynamicResource ResizedItemsDataTemplate}" > 
     </ListBox> 

Lo sentimos Matt, acabo de recibir su respuesta ya que estaba escribiendo esta publicación.

1

HorizontalContentAlignment es una solución agradable y limpia en comparación con lo que estaba intentando. ¡Gracias!

Esto es lo que casi funcionó, pero a veces hace un cuadro de diálogo se animó más y más para siempre:

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

¿Por qué publicar una respuesta que * casi * funciona cuando hay una solución perfectamente buena que funciona? Especialmente 10 meses después de que la pregunta ha sido respondida ... (Nota al margen: acabo de hacer exactamente el mismo enfoque que hace un momento ... :) –

Cuestiones relacionadas