wpf wpf-controls autosize

Wpf controla el tamaño al contenido?



wpf-controls autosize (4)

¿Cómo hago un control de WPF para cambiar su tamaño de acuerdo con el contenido que contiene?


Si está utilizando la cuadrícula o un componente similar: en XAML, asegúrese de que los elementos en la cuadrícula tengan definidos Grid.Row y Grid.Column, y asegúrese de que no tengan márgenes. Si usó el modo de diseñador o Expression Blend, podría haber asignado márgenes relativos a toda la grilla en lugar de a celdas particulares. En cuanto al tamaño de las celdas, agrego una celda extra que llena el resto del espacio:

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


Tenía un control de usuario que se encontraba en la página de forma libre, no restringido por otro contenedor, y el contenido dentro del control de usuario no se dimensionaba automáticamente, sino que se expandía al tamaño completo de lo que el control del usuario le era entregado.

Para que el control del usuario simplemente se ajuste a su contenido, solo para la altura, lo coloqué en una cuadrícula con la fila establecida en el tamaño automático, como este:

<Grid Margin="0,60,10,200"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <controls1:HelpPanel x:Name="HelpInfoPanel" Visibility="Visible" Width="570" HorizontalAlignment="Right" ItemsSource="{Binding HelpItems}" Background="#FF313131" /> </Grid>


Tuve un problema como este por el cual había especificado el ancho de mi Ventana, pero tenía la altura establecida en Auto . El niño DockPanel tenía su DockPanel VerticalAlignment establecida en la parte superior y la ventana tenía su DockPanel la DockPanel vertical establecida en la parte superior, sin embargo, la ventana todavía sería mucho más alta que el contenido.

Usando Snoop, descubrí que el ContentPresenter dentro de la Ventana (parte de la Ventana, no algo que había puesto ahí) tiene su Alineación VerticalAlignment establecida en Stretch y no puede ser cambiada sin volver a proyectar toda la Ventana!

Después de mucha frustración, descubrí la propiedad SizeToContent : puede usar esto para especificar si desea que la Ventana se dimensione vertical, horizontal o ambas, de acuerdo con el tamaño de los contenidos: todo está dimensionando bien ahora, simplemente no puedo ¡Creo que me tomó tanto tiempo encontrar esa propiedad!


Para la mayoría de los controles, configura su altura y ancho en Auto en el XAML, y se ajustará para ajustarse a su contenido.

En el código, establece el ancho / alto en double.NaN . Para obtener detalles, vea FrameworkElement.Width , particularmente la sección "observaciones".