Search code examples
c#wpfcomboboxdatatemplate

C# WPF - Selected Item text is cut


The text in the SelectedItem of ComboBox is cutted. In the example "Manual load" ---->> "Manual loa" I tried to set Margin=0 and Padding=0 in the template (as suggested in this topic "https://stackoverflow.com/questions/48291742/c-sharp-wpf-combobox-selected-item-text-cut-off") but nothing works

My ComboBox

<ComboBox x:Name="cmbLoad" Padding="5,0,0,0" Grid.Column="1" ItemTemplate="{StaticResource ResourceKey=Id_Name_Template}" SelectionChanged="Cmb_Load_SelectionChanged" HorizontalAlignment="Stretch" HorizontalContentAlignment="Left"/>

My Template

<DataTemplate  x:Key="Id_Name_Template" >
            <StackPanel >
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                        <ColumnDefinition />
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>
                    <TextBlock Grid.Column="0" Margin="0" Padding="0" VerticalAlignment="Center">
                        <Run FontWeight="Bold" Text="{Binding Id}"/>
                    </TextBlock >
                    <TextBlock Grid.Column="1" Text="-"  Margin="5,0,5,0"  Padding="0"/>
                    <TextBlock Grid.Column="2" Margin="0" Padding="0" VerticalAlignment="Center" FontStyle="Italic" Text="{Binding Name}" />
                </Grid>
            </StackPanel>
        </DataTemplate>

The result

enter image description here


Solution

  • Get rid of the StackPanel and set the Width of the ColumnDefinitions:

    <DataTemplate  x:Key="Id_Name_Template" >
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Column="0" Margin="0" Padding="0" VerticalAlignment="Center">
                 <Run FontWeight="Bold" Text="{Binding Id}"/>
            </TextBlock >
            <TextBlock Grid.Column="1" Text="-"  Margin="5,0,5,0"  Padding="0"/>
            <TextBlock Grid.Column="2" Margin="0" Padding="0" VerticalAlignment="Center" FontStyle="Italic" Text="{Binding Name}" />
        </Grid>
    </DataTemplate>