Pregunta

Estoy tratando de definir un DataTemplate para un objeto comercial en mi aplicación wpf, cuya colección está vinculada a un ListBox.

<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 definir el borde con x: Name = bdr para abarcar todo el ancho de cada elemento del cuadro de lista? Por el momento, solo abarca los bloques de texto en su interior que no son necesarios para llenar todo el ancho del elemento listbox y también varían para cada elemento listbox.

¿Fue útil?

Solución

Esto probablemente tenga más que ver con que los ListBoxItems en sí mismos 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.

Otros consejos

Lo resolvió. El truco consiste en establecer HorizontalContentAlignment = " Stretch " en su cuadro de lista para que su contenido se extienda por todo el ancho en lugar de ajustarse solo al contenido.

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

Lo siento Matt, acabo de recibir tu respuesta mientras escribía esta publicación.

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 hizo que un cuadro de diálogo se animara más y más para siempre:

Width="{Binding ActualWidth, 
        RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top