A StackPanel
даст своим компонентам бесконечную высоту или ширину в зависимости от Orientation
.
Если я посмотрю на ваш XAML, я бы предложил использовать два столбца в сетке и поместить изображение налевая сторона:
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="40" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions >
<RowDefinition Height="60"/>
<RowDefinition Height="170"/>
<RowDefinition Height="50"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.ColumnSpan="2"></TextBlock>
<TextBlock Grid.Row="1" Grid.ColumnSpan="2"></TextBlock>
<TextBlock Grid.Row="2" Grid.ColumnSpan="2"></TextBlock>
<Image Grid.Row="3" Source="Picture.png" MaxHeight="20" HorizontalAlignment="Center" Margin="0,20,0,0" />
<TextBlock Grid.Column="1" Grid.Row="3" Text="Long long long text from Binding" FontSize="25"
HorizontalAlignment="Center" TextAlignment="Center" TextWrapping="Wrap"
VerticalAlignment="Bottom" Padding="20,10,0,0" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
Обратите внимание на Grid.ColumnSpan для первых текстовых полей, они будут охватывать их по всей ширине сетки, а не только по первому столбцу.