如何制作 WPF 控件,以根据其中的内容更改其大小?
对于大多数控件,您可以在 XAML 中将其高度和宽度设置为 Auto,它的大小将适合其内容。
Auto
在代码中,您将宽度/高度设置为 double.NaN。有关详细信息,请参阅 框架元素。宽度,特别是“备注”部分。
double.NaN
我有一个类似的问题,我指定了我的窗口的宽度,但高度设置为 Auto。孩子 DockPanel的 VerticalAlignment设置为顶部,窗口的垂直内容对齐设置为顶部,但是窗口仍然比内容高得多。
DockPanel
VerticalAlignment
通过使用 Snoop,我发现窗口中的 ContentPresenter(窗口的一部分,不是我放在那里的东西)将 VerticalAlignment设置为 Stretch,如果不重新模拟整个窗口就无法更改!
ContentPresenter
Stretch
在经历了许多挫折之后,我发现了 SizeToContent属性——你可以用它来指定你想要窗口垂直、水平或者两者都调整大小,根据内容的大小——现在一切都调整得很好,我只是不敢相信我花了这么长时间才找到这个属性!
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>