如何让含缩放变换内容的Grid自动适配高度?
解决Grid高度未适配缩放后UserControl的纯XAML方案
问题根源在于你使用的RenderTransform是渲染阶段应用的变换,它不会参与布局系统的测量与排列计算,所以Grid始终会以BlockControl未缩放的原始高度来确定自身尺寸。
要实现Grid高度自动适配缩放后的控件,只需将RenderTransform替换为LayoutTransform——它会在布局阶段就应用变换,布局系统会基于变换后的尺寸来计算Grid的高度:
修改后的XAML代码:
<Grid Background="Orange"> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <local:BlockControl Grid.Column="0" MouseDown="BlockControl_MouseDown" DataContext="{Binding Block}"> <local:BlockControl.LayoutTransform> <TransformGroup> <ScaleTransform ScaleX="0.5" ScaleY="0.5"/> </TransformGroup> </local:BlockControl.LayoutTransform> </local:BlockControl> <TextBlock Grid.Column="1" Text="{Binding Block.FunctionFullName}"/> </Grid>
补充说明
- 如果缩放后控件位置出现偏移,可在
TransformGroup中添加TranslateTransform调整位置,比如设置TranslateTransform X="25" Y="25"(数值需根据缩放比例实际调整),让控件保持在预期布局位置。 LayoutTransform会触发重新布局,对性能有轻微影响,但对于静态缩放的场景完全适用。
内容的提问来源于stack exchange,提问作者Kamil
相关产品推荐
相关产品推荐

