Если вы хотите, чтобы что-то выровнялось, StackLayout, вероятно, не способ сделать это. StackLayout выделяет пространство для каждого дочернего элемента в зависимости от того, сколько ему нужно, поэтому, если каждая строка в вашем списке имеет разные требования к ширине для разных элементов, например, для цены, вы получите вид макета, который вы видите.
Лучшим подходом будет Grid, который дает вам явный контроль над шириной каждого столбца:
<ListView.ItemTemplate >
<DataTemplate>
<ViewCell>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
</Grid>
<Label Text="{Binding ItemNumber}" Grid.Column="0" FontSize="20" ></Label>
<Label Text="{Binding StockCode}" Grid.Column="1" FontSize="20" TextColor="Gray"></Label>
<Label Text="{Binding StockDescription}" Grid.Column="2" FontSize="20" TextColor="Gray"></Label>
<Label Text="{Binding Price}" Grid.Column="3" TextColor="Gray" FontSize="20" ></Label>
<Label Text="{Binding Qty}" Grid.Column="4" TextColor="Gray" FontSize="20" ></Label>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
В этом примере каждый столбец определен, чтобы иметь равную ширину (равномерно делить доступную ширину), но вы можете отрегулировать, как считаете нужным.
Вы можете изменить одно из ColumnDefinitions на Width = "1.5 *", которое будет выделять в 1,5 раза больше места для этого столбца, чем для других столбцов. Или вы можете определить столбец с Width = "100", который даст ему фиксированный размер независимо от ширины экрана.
Существует также Width = "Auto", который позволяет вам установить ширину столбца на основе количества пространства, необходимого для содержимого этого столбца, но, поскольку каждая строка в вашем ListView представляет собой отдельную таблицу, вы должны завершить с той же проблемой, что и сейчас, с StackLayout.