キャンバス上の固定位置を持つグリッドがあります。グリッドには、サイズが異なる可能性がある画像を含む境界線があります。
ここで、長さが異なる可能性のあるテキストを含む 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 を持っている人はいますか?
明確化
凡例
テキストなし- 元の状態
望ましくない状態- グリッドに行を追加すると、このようになります。指定した座標から画像を水平方向にずらした
状態 望ましい状態- アイコンをその下のテキストを中央に配置したまま、その位置に保持したい