2009-11-17 11 views

Respuesta

74

Para la mayoría de los controles, configure su alto 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 más detalles, vea FrameworkElement.Width, particularmente la sección "observaciones".

+34

Además de una gran cantidad de controles establecido su alineación horizontal y vertical para estirar, lo que hará que llenen un área disponible, por lo que probablemente deba especificar estas propiedades, por ej. HorizontalAlignment = "Left" VerticalAlignment = "Top". –

26

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 VerticalAlignment configurado en la parte superior y la ventana tenía su VerticalContentAlignment en la parte superior, sin embargo, la ventana aún sería mucho más alta que el contenido.

El uso de Snoop, descubrí que la ContentPresenter dentro de la ventana (parte de la ventana, algo que no había puesto allí) tiene su VerticalAlignment conjunto de Stretch y no puede ser cambiado sin retemplating toda la ventana!

Después de mucha frustración, descubrí la propiedad SizeToContent - puede usar esto para especificar si desea que la ventana tenga un tamaño vertical, horizontal o ambos, de acuerdo con el tamaño de los contenidos: todo está dimensionando bien ahora, ¡No puedo creer que me haya llevado tanto tiempo encontrar esa propiedad!

+7

Ojalá todas las grillas tuvieran esta propiedad ... – Shimmy

+4

Cuando el problema se aplica a la ventana de nivel superior Configure SizeToContent = "WidthAndHeight". Perdí horas en esto, ¡no es intuitivo! Ver http://stackoverflow.com/questions/812079/window-heightauto-problem – DeveloperDan

+1

Aunque una 'Ventana' es un' Control', creo que el OP se refería a un 'UserControl', que no tiene' SizeToContent 'propiedad. De lo contrario, el OP usaría el término "Ventana" en el tema. – ProfK

1

Si está utilizando la cuadrícula o un componente similar: En XAML, asegúrese de que los elementos en la cuadrícula tengan Grid.Row y Grid.Column definidos, 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 a dimensionamiento celular, añado una célula 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

que tenía un control de usuario, que se sentó en la página en una forma de manera libre, no limitados por otro recipiente, y el el contenido dentro del control de usuario no se dimensionaría automáticamente, sino que se expandiría al tamaño completo de lo que se le entregó al usuario.

Para obtener el control de usuario simplemente el tamaño de su contenido, para la altura única, lo coloqué en una cuadrícula con el conjunto de filas de 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> 
Cuestiones relacionadas