Wpf control tamaño al contenido?


¿Cómo puedo hacer un control WPF para cambiar su tamaño de acuerdo con el contenido en él?

Author: Dave Clemmer, 2009-11-17

4 answers

Para la mayoría de los controles, se establece su altura y anchura en Auto en el XAML, y el tamaño se ajustará a su contenido.

En el código, se establece el ancho/alto en double.NaN. Para más detalles, véase FrameworkElement.Width , particularmente la sección "observaciones".

 80
Author: Reed Copsey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-25 14:19:32

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 hijo DockPanel tenía su VerticalAlignment establecido en la Parte superior y la Ventana tenía su VerticalContentAlignment establecido 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 allí) tiene VerticalAlignment establecido en Stretch y no se puede cambiar sin volver a emplatar todo el Ventana!

Después de mucha frustración, descubrí la propiedad SizeToContent - puede usar esto para especificar si desea que la ventana se dimensione verticalmente, horizontalmente o ambos, de acuerdo con el tamaño del contenido - todo se está dimensionando muy bien ahora, ¡no puedo creer que me haya llevado tanto tiempo encontrar esa propiedad!

 27
Author: TabbyCool,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-25 14:42:16

Si está utilizando el componente grid o similar: En XAML, asegúrese de que los elementos de la cuadrícula tienen cuadrícula.Fila y Cuadrícula.Columna definida, y asegúrese de que no tienen márgenes. Si utilizó el modo diseñador o Mezcla de expresiones, podría haber asignado márgenes relativos a toda la cuadrícula en lugar de a celdas particulares. En cuanto al tamaño de las celdas, agrego una celda adicional 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>
 1
Author: Amadeusz Wieczorek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-13 15:06:17

Tenía un control de usuario que se sentó en la página de forma libre, no limitado por otro contenedor, y el contenido dentro del control de usuario no se auto tamaño, pero se expanden al tamaño completo de lo que el control de usuario fue entregado.

Para obtener el control de usuario simplemente tamaño a su contenido, solo para altura, lo coloqué en una cuadrícula con on row establecido en 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>
 1
Author: ΩmegaMan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-25 14:40:39