Ваш разделитель идет впереди в следующей строке, потому что он находится перед LinkId TextBox, и оба они связаны друг с другом внутри WrapPanel. Вся WrapPanel переходит на следующую строку.
Родительская панель над WrapPanels не знает и не заботится о том, что внутри них.
![Example showing the approximate Layout](https://i.stack.imgur.com/VR8FB.png)
Кстати, я не знаю, было ли это вашим намерением, но в написанном вами коде вы генерируете разные WrapPanel для каждого элемента в вашей коллекции. В вашем списке тестов 20 WrapPanels.
Если, как вы говорите, разделитель после последнего не является проблемой, это достаточно хорошее решение:
<ItemsControl
ItemsSource="{Binding YourItems}"
>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel
Orientation="Horizontal"
></WrapPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel
Orientation="Horizontal"
>
<TextBlock
Text="{Binding LinkId}"
></TextBlock>
<TextBlock
Text="; "
></TextBlock>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Если это только для целей отображения данных, учтите, что эти тексбоксы в строке могут быть одной строкой внутри TextBox. Возможно, вы могли бы использовать одну отформатированную строку и превратить соответствующие части в ссылки. Это переместит часть действия с разделителем строк в ViewModel и значительно упростит ваш код XAML.