我有一个在画布上具有固定位置的网格。网格有一个边框,其中包含大小可能不同的图像。
现在,我在图像下方添加一个 TextBlock,其中包含长度可能不同的文本。要求是无论文本的长度如何,图标都不应在画布上移动。
<Canvas>
<Grid Canvas.Left="50" Canvas.Top="100">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Border BorderBrush="Black" BorderThickness="1" Background="Gray"
Width="{Binding RelativeSource={RelativeSource Self}, Path=Height}"
HorizontalAlignment="Center">
<Image Source="{Binding TheIcon}"
Width="{Binding IconSize}" Height="{Binding IconSize}"
Margin="5" />
</Border>
<TextBlock Grid.Row="1"
Text="A text that is wider than the icon"
TextAlignment="Center"/>
</Grid>
</Canvas>
问题是当文本变得比图标宽时,网格的宽度会增加,并且图标开始向右滑动。这可以通过在边框上设置 HorizontalAlignment="Left" 来解决,但是我们希望文本在图标下方居中,因为它看起来要好得多。
我已经搞砸了 ClipToBounds="False" 和不同的构建对象的方法,但我没有找到任何有效的方法。有人有一些 xaml-magic 可以分享吗?
澄清
图例
无文本- 原始状态不想要的
状态- 这就是我在网格中添加一行时的样子。图像从指定的坐标水平移动
所需状态- 我想将图标保持在原位,同时将其下方的文本居中