72

如何使 WPF 控件根据其中的内容更改其大小?

4

4 回答 4

92

对于大多数控件,您Auto在 XAML 中将其高度和宽度设置为,它的大小将适合其内容。

在代码中,您将宽度/高度设置为double.NaN. 有关详细信息,请参阅FrameworkElement.Width,尤其是“备注”部分。

于 2009-11-17T03:42:05.263 回答
35

我遇到了这样的问题,我指定了窗口的宽度,但将高度设置为Auto. 孩子DockPanel将其VerticalAlignment设置为 Top,Window 将 VerticalContentAlignment 设置为 Top,但 Window 仍将比内容高得多。

使用 Snoop,我发现ContentPresenter窗口内(窗口的一部分,不是我放在那里的东西)已VerticalAlignment设置为Stretch并且如果不重新模板化整个窗口就无法更改!

在经历了很多挫折之后,我发现了这个SizeToContent属性——你可以使用它来指定你是否希望窗口根据内容的大小垂直、水平或同时调整大小——现在一切都很好地调整了大小,我简直不敢相信我花了这么长时间才找到那个属性!

于 2010-02-23T12:07:27.787 回答
2

我有一个用户控件,它以自由形式位于页面上,不受另一个容器的约束,并且用户控件中的内容不会自动调整大小,而是扩展到用户控件的完整大小。

为了让用户控件简单地调整到其内容的大小,仅针对高度,我将它放入一个网格中,并将行设置为自动大小,如下所示:

<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>
于 2015-08-25T14:40:39.827 回答
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>
于 2012-01-13T15:06:17.463 回答