WPF控件大小到内容?


Answers:


91

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

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


37
另外,许多控件将其Horizo​​ntal-和VerticalAlignment设置为Stretch,这将导致它们填充可用区域,因此您可能需要指定这些属性,例如Horizo​​ntalAlignment =“ Left” VerticalAlignment =“ Top”。
布赖恩·安德森

31

我遇到了这样的问题,即我已经指定了Window的宽度,但是将高度设置为Auto。孩子DockPanel将其VerticalAlignment设置为Top,将Window的VerticalContentAlignment设置为Top,但是Window仍然比内容高。

使用Snoop,我发现ContentPresenterWindow内(窗口的一部分,不是我放置在其中的东西)已VerticalAlignment设置为Stretch,并且不重新制作整个Window就无法更改!

经过很多挫败之后,我发现了该SizeToContent属性-您可以使用此属性指定窗口是否要根据内容的大小垂直,水平或同时使用这两个大小-现在,所有内容的大小都很好,我简直不敢相信我花了很长时间才找到那处房产!


4
当问题适用于顶层窗口时,请设置SizeToContent =“ WidthAndHeight”。我在这个上浪费了很多时间-这不直观!参见stackoverflow.com/questions/812079/window-heightauto-problem
DeveloperDan 2010年

1
虽然aWindow是a Control,但我认为OP所指的是a UserControl,它没有SizeToContent 属性。否则,OP将在主题中使用术语“窗口”。
ProfK

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>

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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.