【发布时间】:2013-03-18 17:25:42
【问题描述】:
我有一个在画布上具有固定位置的网格。网格的边框包含大小可能不同的图像。
现在我在图像下方添加一个 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 可以分享吗?
澄清
图例
无文本 - 原始状态
不想要的状态 - 这就是我在网格中添加一行时的样子。图像从指定坐标水平移动
所需状态 - 我想保持图标在原位,同时将其下方的文本居中
【问题讨论】:
-
<TextBlock Width="{Binding IconSize}"?? -
好的,这使得文本块和图标一样宽,这很好。缺点是它还会截断文本。
-
尝试包装文本
TextWrapping="Wrap" -
这样我就可以将任务标记为已完成。但用户不会高兴,因为带有
-
然后也许设置一个最小尺寸也
MinWidth="200"或者任何值适合你的用户界面