Wpf控制大小到内容?

时间:2009-11-17 03:39:09

标签: wpf wpf-controls autosize

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

4 个答案:

答案 0 :(得分:83)

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

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

答案 1 :(得分:27)

我有这样的问题,我指定了窗口的宽度,但高度设置为Auto。子DockPanelVerticalAlignment设置为Top,窗口将VerticalContentAlignment设置为Top,但Window仍然比内容高得多。

使用Snoop,我发现窗口中的ContentPresenter(窗口的一部分,而不是我放在那里的东西)将VerticalAlignment设置为Stretch并且不能没有重新整个窗口就改变了!

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

答案 2 :(得分: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>

答案 3 :(得分:1)

我有一个用户控件,它以自由格式的方式坐在页面上,不受另一个容器的约束,并且用户控件中的内容不会自动调整大小,而是扩展到用户控件的完整大小。< / p>

要让用户控件只调整其内容的大小,仅为了高度,我将其放入网格中,行上的行设置为自动大小,如下所示:

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