2009-11-17 9 views

Antwort

74

Für die meisten Steuerelemente legen Sie im XAML die Höhe und Breite auf Auto fest, und die Größe wird an den Inhalt angepasst.

Im Code legen Sie die Breite/Höhe auf double.NaN fest. Einzelheiten finden Sie unter FrameworkElement.Width, insbesondere im Abschnitt "Bemerkungen".

+34

Außerdem setzen viele Kontrollen ihre Horizontal- und VerticalAlignment to Stretch, die dazu führen, dass sie einen verfügbaren Bereich ausfüllen, so dass Sie wahrscheinlich diese Eigenschaften angeben müssen, z HorizontalAlignment = "Links" VerticalAlignment = "Top". –

26

Ich hatte ein Problem so, wobei ich die Breite meines Fensters angegeben hatte, aber die Höhe auf Auto gesetzt hatte. Das Kind DockPanel hatte es VerticalAlignment auf Top gesetzt und das Fenster hatte seine VerticalContentAlignment auf Top gesetzt, aber das Fenster wäre immer noch viel größer als der Inhalt.

Snoop verwenden, entdeckte ich, dass die ContentPresenter innerhalb des Fensters (Teil des Fensters, nicht etwas, das ich gesetzt hatte es) hat es VerticalAlignment Set Stretch und kann nicht ohne retemplating das gesamte Fenster geändert werden!

Nach einer Menge Frustration, entdeckte ich die SizeToContent Eigenschaft - Sie können dies verwenden, um anzugeben, ob Sie das Fenster vertikal, horizontal oder beides, je nach der Größe des Inhalts - alles Größe jetzt schön, ich Ich kann nicht glauben, dass es so lange gedauert hat, dieses Eigentum zu finden!

+7

Ich wünschte, alle Gitter würden diese Eigenschaft haben ... – Shimmy

+4

Wenn das Problem für das oberste Fenster gilt Set SizeToContent = "WidthAndHeight". Ich habe hier Stunden verloren - es ist nicht intuitiv! Siehe http://stackoverflow.com/questions/812079/window-heightauto-problem – DeveloperDan

+1

Obwohl ein 'Window' ein' Control' ist, denke ich, dass das OP sich auf ein 'UserControl' bezieht, das keinen' SizeToContent 'hat 'Eigentum. Andernfalls würde das OP den Begriff "Fenster" im Betreff verwenden. – ProfK

1

Wenn Sie die Raster- oder ähnliche Komponente verwenden: Stellen Sie in XAML sicher, dass Grid.Row und Grid.Column für die Elemente im Raster definiert sind, und stellen Sie sicher, dass sie keine Ränder haben. Wenn Sie den Designer-Modus oder Expression Blend verwendet haben, könnte es Ränder relativ zum gesamten Raster statt zu bestimmten Zellen zugewiesen haben. Wie für die Zell Sizing, ich eine zusätzliche Zelle hinzufügen, die den Rest des Raumes füllt:

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

ich ein Benutzersteuer hatte, die auf Seite in freier Form Art und Weise setzte sich nicht durch einen anderen Behälter beschränkt, und die Der Inhalt innerhalb des Benutzersteuerelements würde nicht automatisch skalieren, sondern auf die volle Größe des Benutzersteuerelements erweitert.

Um dem Benutzer die Kontrolle einfach Größe auf den Inhalt, für die Höhe zu bekommen nur ich es in ein Raster mit auf Zeile platziert Autogröße festgelegt wie folgt aus:

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