Canvas всегда будет давать дочерним элементам «желаемый размер». Таким образом, если ваш TextBlock должен иметь ширину 100 пикселей для отображения текста, то Canvas даст ему ровно 100 пикселей. Grid, с другой стороны, может дать TextBlock больше или меньше места в зависимости от того, в каком столбце / строке находится TextBlock.
Для отдельных строк текста (т. Е. Без новых строк) единственное время, когда TextAlignment вступает в игру, - это когда TextBlock дается больше (или меньше, если TextWrapping включено) пространства, чем ему нужно.
Для нескольких строк текста (или в случае переноса текста в одну строку) TextAlignment будет выравнивать свой текст в пределах границ TextBlock.
Так как Canvas никогда не заставляет TextBlock переноситься, единственный раз, когда TextAlignment вступает в игру, это с несколькими строками текста.
<Canvas Width="300" Height="50">
<TextBlock Canvas.Top="0" TextAlignment="Center">
This will not center
</TextBlock>
<TextBlock Canvas.Top="25" TextAlignment="Center">
This will center the shorter<LineBreak />lines of text
</TextBlock>
</Canvas>