2009-11-17 111 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>