控制内容的大小?

如何制作 WPF 控件,以根据其中的内容更改其大小?

120347 次浏览

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

在代码中,您将宽度/高度设置为 double.NaN。有关详细信息,请参阅 框架元素。宽度,特别是“备注”部分。

我有一个类似的问题,我指定了我的窗口的宽度,但高度设置为 Auto。孩子 DockPanelVerticalAlignment设置为顶部,窗口的垂直内容对齐设置为顶部,但是窗口仍然比内容高得多。

通过使用 Snoop,我发现窗口中的 ContentPresenter(窗口的一部分,不是我放在那里的东西)将 VerticalAlignment设置为 Stretch,如果不重新模拟整个窗口就无法更改!

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

如果您正在使用网格或类似的组件: 在 XAML 中,确保网格中的元素具有 Grid。行与网格。列定义,并确保它们没有页边距。如果使用设计器模式或表达式混合,则可以相对于整个网格而不是特定单元格分配页边距。 至于单元格大小,我添加了一个额外的单元格来填充剩余的空间:

    <Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*"/>
</Grid.RowDefinitions>

我有一个用户控件,它以自由格式放在页面上,不受另一个容器的约束,用户控件中的内容不会自动调整大小,而是扩展到用户控件的全部大小。

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

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