2009-11-17 12 views

risposta

74

Per la maggior parte dei controlli, l'altezza e la larghezza sono impostate su Auto in XAML e verranno ridimensionate per adattarsi al suo contenuto.

In codice, impostare la larghezza/altezza su double.NaN. Per i dettagli, vedere FrameworkElement.Width, in particolare la sezione "Note".

+34

Inoltre impostato un sacco di controlli il loro Allineamento orizzontale e verticale da allungare che li farà riempire un'area disponibile, quindi sarà probabilmente necessario specificare queste proprietà, ad es. HorizontalAlignment = "Left" VerticalAlignment = "Top". –

26

Ho avuto un problema di questo tipo in cui avevo specificato la larghezza della mia finestra, ma l'altezza era impostata su Auto. Il bambino DockPanel aveva il VerticalAlignment impostato su Alto e la Finestra aveva il VerticalContentAlignment impostato su Alto, tuttavia la Finestra sarebbe ancora molto più alta del contenuto.

Utilizzando Snoop, ho scoperto che la ContentPresenter all'interno della finestra (parte della finestra, non è qualcosa che avevo messo lì) ha il VerticalAlignment insieme a Stretch e non può essere modificato senza retemplating l'intera finestra!

Dopo un sacco di frustrazione, ho scoperto la proprietà SizeToContent - è possibile utilizzare questa opzione per specificare se si desidera che la finestra di dimensioni verticalmente, orizzontalmente o entrambi, a seconda delle dimensioni dei contenuti - tutto è dimensionamento bene ora, non riesco a credere che mi ci sia voluto così tanto tempo per trovare quella proprietà!

+7

Vorrei che tutte le Griglie avessero questa proprietà ... – Shimmy

+4

Quando il problema si applica alla finestra di livello superiore Imposta SizeToContent = "WidthAndHeight". Ho perso ore su questo - non è intuitivo! Vedi http://stackoverflow.com/questions/812079/window-heightauto-problem – DeveloperDan

+1

Anche se un 'Window' è un' Control', penso che l'OP si riferisse ad un 'UserControl', che non ha un' SizeToContent 'proprietà. Altrimenti l'OP userebbe il termine "Finestra" nell'oggetto. – ProfK

1

Se si utilizza la griglia o un componente simile: In XAML, assicurarsi che gli elementi nella griglia abbiano Grid.Row e Grid.Column definiti e assicurarsi che non abbiano margini. Se si è utilizzata la modalità designer o Expression Blend, potrebbe avere assegnato i margini relativi all'intera griglia anziché a particolari celle. Per quanto riguarda il dimensionamento delle cellule, aggiungo una cella in più che riempie il resto dello spazio:

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

ho avuto un controllo utente, che era seduto sulla pagina in un modo forma libera, non vincolata da un altro contenitore, e la i contenuti all'interno del controllo utente non avrebbero dimensioni automatiche, ma si espandono fino alla dimensione totale di ciò che il controllo utente è stato consegnato.

Per ottenere il controllo utente semplicemente formato al suo contenuto, in altezza solo, posi in una griglia con nel braccio impostato automaticamente il formato come questo:

<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> 
Problemi correlati