如何使 WPF 控件根据其中的内容更改其大小?
4 回答
对于大多数控件,您Auto
在 XAML 中将其高度和宽度设置为,它的大小将适合其内容。
在代码中,您将宽度/高度设置为double.NaN
. 有关详细信息,请参阅FrameworkElement.Width,尤其是“备注”部分。
我遇到了这样的问题,我指定了窗口的宽度,但将高度设置为Auto
. 孩子DockPanel
将其VerticalAlignment
设置为 Top,Window 将 VerticalContentAlignment 设置为 Top,但 Window 仍将比内容高得多。
使用 Snoop,我发现ContentPresenter
窗口内(窗口的一部分,不是我放在那里的东西)已VerticalAlignment
设置为Stretch
并且如果不重新模板化整个窗口就无法更改!
在经历了很多挫折之后,我发现了这个SizeToContent
属性——你可以使用它来指定你是否希望窗口根据内容的大小垂直、水平或同时调整大小——现在一切都很好地调整了大小,我简直不敢相信我花了这么长时间才找到那个属性!
我有一个用户控件,它以自由形式位于页面上,不受另一个容器的约束,并且用户控件中的内容不会自动调整大小,而是扩展到用户控件的完整大小。
为了让用户控件简单地调整到其内容的大小,仅针对高度,我将它放入一个网格中,并将行设置为自动大小,如下所示:
<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>