2009-11-17 126 views

回答

74

對於大多數控件,您可以在XAML中將其高度和寬度設置爲Auto,並且尺寸將根據其內容進行調整。

在代碼中,您將寬度/高度設置爲double.NaN。有關詳情,請參閱FrameworkElement.Width,特別是「備註」部分。

+34

除了大量的控制設定他們的橫向和縱向對齊拉伸,這將導致他們填充可用區域,所以你可能需要指定這些屬性,例如Horizo​​ntalAlignment =「左」VerticalAlignment =「上」。 –

26

我有這樣的問題,我指定了我的窗口的寬度,但高度設置爲Auto。子節點DockPanel已將它的VerticalAlignment設置爲Top,並且窗口將VerticalContentAlignment設置爲Top,但該窗口仍然比內容高很多。

使用史努比,我發現,在窗口內ContentPresenter(在窗口的一部分,不是我放在那裏)有它的VerticalAlignment設置爲Stretch,沒有retemplating整個窗口不能改變!

在經歷了很多挫折之後,我發現SizeToContent屬性 - 您可以使用它來指定您希望Window根據內容的大小縱向,橫向或者同時選擇兩種尺寸 - 現在所有尺寸都很好,我簡直不敢相信,花了我很長時間才找到那個財產!

+7

我希望所有網格都具有此屬性... – Shimmy

+4

當問題適用於頂層窗口時Set SizeToContent =「WidthAndHeight」。我在這一個上丟了幾個小時 - 這不直觀!查看http://stackoverflow.com/questions/812079/window-heightauto-problem – DeveloperDan

+1

儘管'Window'是一個'Control',我認爲OP是指'UserControl',它沒有'SizeToContent財產。否則,OP將在主題中使用術語「窗口」。 – ProfK

1

如果您使用網格或類似組件: 在XAML中,確保網格中的元素已定義Grid.Row和Grid.Column,並確保它們沒有邊距。如果您使用設計器模式或Expression Blend,則可能會將邊距指定爲整個網格而不是特定的單元格。 作爲細胞大小,我補充一點,填補了空間的其餘部分額外的單元格:

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

我,坐在頁上的自由形式的方式用戶控制,而不是由另一個容器的限制,以及用戶控件中的內容不會自動調整大小,而會擴展到用戶控件的全部大小。

爲了讓用戶控制簡單地大小的內容,身高只有,我把它變成一個網格列設置爲自動大小像這樣:

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