This is an alternative to the Philip Stuyck panel offer, which you may find simpler for your specific scenario. (In truth, this is a hack.)
You can calculate the length of a string using the FormattedText class. This way you can iterate over the strings and calculate the maximum length (this also assumes that you know the font family and size). Then just snap the width of your text blocks to the maximum width. I would save the width value in one property at the parent level, and then using the RelativeSource binding:
<TextBlock Text="{Binding}" Width="{Binding RelativeSource={RelativeSource AncestorType=ItemsControl}, Path=MaximumWidth}}" />
(One of the drawbacks of this approach is that if the collection of elements changes, you will have to recalculate MaximumWidth.)
source share