Combobox中DataTemplated项目的对齐+将当前项目传递给命令

Alignment of DataTemplated Items in Combobox + passing Current item to command

如何与 WPF 组合框中的右 X 按钮对齐?
我得到的是:

Xaml:

<ComboBox ItemsSource="{Binding Entities}" 
      SelectedItem="{Binding SelectedEntity}" >

    <ComboBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>

                <TextBlock Text="{Binding EntityName, Mode=OneWay}"
                           VerticalAlignment="Center"/>

                <Button Grid.Column="1" HorizontalAlignment="Right" 
                        Command="{Binding DataContext.DeleteEntityCommand, 
                        RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}">

                    <Image Source="..\Resources\DeleteIcon.png" HorizontalAlignment="Center" />
                </Button>
            </Grid>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

Entities 是一些 Entity class 的 ObservableCollection
我必须使用其他东西来代替 Grid 吗?

还有一个问题:
如果用户单击某个项目的 X 按钮,则必须将其传递给 DeleteEntityCommand(可能使用 CommandParameter)。怎么做? ComboBoxSelectedItem 仍然是 AAAAAA,而不是 HHHH(见图)。

问题是,模板中的网格没有延伸到可用 space。根据这个 可以用

来实现
<ComboBox>
    <ComboBox.ItemContainerStyle>
        <Style TargetType="ComboBoxItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        </Style>
    </ComboBox.ItemContainerStyle>
    <ComboBox.ItemTemplate>
        <DataTemplate>
        //etc.

注意:如果您没有定义 Button 的宽度,它将被拉伸到剩余的 space。我建议添加一个 Width=Auto 的 Columndefinition 并在那里添加 Button (Grid.Column=2).

编辑

额外的列应该是这样的填充物(左),因为您的按钮可能会在可用的space(右)上伸展。

第二题

您可以设置命令的命令参数,如果我没记错的话,可以使用 {Binding} 传递 Item 本身。

<Button Command={Binding ...} Commandparameter={Binding}/>

并且 ICommand 实现必须 extended/overloaded 才能接受参数。