Я продолжаю сталкиваться с этой проблемой, когда пытаюсь центрировать элементы на странице.
Проблема со StackPanel заключается в том, что HorizontalAlignment не действует, когда Orientation имеет значение Horizontal, и VerticalAlignment не действует, когда Orientation имеет значение Vertical. Таким образом, вы продолжаете биться головой, пытаясь установить значения без эффекта. Нелогично, чтобы это работало таким образом, но было бы хорошо, если бы об этом сообщали как об ошибке.
Решение, которое я нашел, состоит в том, чтобы иметь две встроенные StackPanels, одна по центру по горизонтали, а другая по вертикали, как показано ниже. Чтобы определить размер промежуточной панели, необходимо определить размер родительского элемента, иначе она будет плоской, а ее содержимое скрыто - будет работать и абсолютное значение. Хотя это не панацея, но она немного менее многословна, чем использование сетки.
<StackPanel Background="Bisque" Orientation="Vertical" Width="300" Height="300" >
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal"
Height="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=StackPanel}, Path=ActualHeight}">
<StackPanel VerticalAlignment="Center" Width="200" Height="60" Background="Blue">
</StackPanel>
</StackPanel>
</StackPanel>