[英]Wpf control size to content?
如何使 WPF 控件根据其中的内容更改其大小?
对于大多数控件,您在 XAML 中将其高度和宽度设置为“ Auto
”,并且将调整大小以适合其内容。
在代码中,您将宽度/高度设置为double.NaN
。 有关详细信息,请参阅FrameworkElement.Width ,尤其是“备注”部分。
我遇到了这样的问题,我指定了 Window 的宽度,但将高度设置为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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.