You can use the Grid.IsSharedSizeGroup in the parent ListBox to make sure all your items get the same width for the first column, such as
<ListBox ... Grid.IsSharedSizeScope="True"> <ListBox.ItemTemplate> <DataTemplate> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition SharedSizeGroup="GroupA"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> ...
For the image height problem, you can attach the height to the actual weight of the parent grid using FallbackValue 1.0 (to ensure that the image height does not affect the height of the grid)
<Image Source="{Binding Logo, Converter={StaticResource BSConverter}}" Grid.Row="0" Grid.RowSpan="4" Grid.Column="0" Stretch="Uniform" SnapsToDevicePixels="True" Height="{Binding RelativeSource={RelativeSource AncestorType=Grid}, Path=ActualHeight, FallbackValue=1.0}"/>
source share