如何使WPF控件根据其内容更改其大小?
Answers:
对于大多数控件,可以Auto
在XAML中将其高度和宽度设置为,其大小将适合其内容。
在代码中,将width / height设置为double.NaN
。有关详细信息,请参见FrameworkElement.Width,尤其是“备注”部分。
我遇到了这样的问题,即我已经指定了Window的宽度,但是将高度设置为Auto
。孩子DockPanel
将其VerticalAlignment
设置为Top,将Window的VerticalContentAlignment设置为Top,但是Window仍然比内容高。
使用Snoop,我发现ContentPresenter
Window内(窗口的一部分,不是我放置在其中的东西)已VerticalAlignment
设置为Stretch
,并且不重新制作整个Window就无法更改!
经过很多挫败之后,我发现了该SizeToContent
属性-您可以使用此属性指定窗口是否要根据内容的大小垂直,水平或同时使用这两个大小-现在,所有内容的大小都很好,我简直不敢相信我花了很长时间才找到那处房产!
Window
是a Control
,但我认为OP所指的是a UserControl
,它没有SizeToContent
属性。否则,OP将在主题中使用术语“窗口”。
我有一个用户控件,它以自由格式坐在页面上,不受其他容器的约束,并且该用户控件中的内容不会自动调整大小,而是会扩展到该用户控件所处理内容的全部大小。
为了使用户控件可以简单地调整其内容的大小(仅用于高度),我将其放置在一个网格中,其中行设置为自动大小,例如:
<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>
如果您使用的是网格或类似组件:在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>