您可以使用触发器来做到这一点:
<ComboBox.ItemTemplate>
  <DataTemplate>
    <StackPanel Orientation="Horizontal">
      <TextBlock Text="{Binding Piece.NoPiece}" Width="50" x:Name="Column1" />
      <TextBlock Text="{Binding Piece.Description}" Width="170" />
      <TextBlock Text="{Binding Piece.Categorie.NomCategorie}" x:Name="Column3" />
    </StackPanel>
    <DataTemplate.Triggers>
      <!-- This trigger fires for the selected item in the drop-down list -->
      <DataTrigger Binding="{Binding 
                       RelativeSource={RelativeSource Mode=FindAncestor, 
                                                      AncestorType=ComboBoxItem},
                       Path=IsSelected}" 
        Value="True">
        <Setter TargetName="Column1" Property="Visibility" Value="Hidden" />
        <Setter TargetName="Column3" Property="Visibility" Value="Hidden" />
      </DataTrigger>
      <!-- This trigger fires for the selected item (ie the one that's
           visible when the popup is closed -->
      <DataTrigger Binding="{Binding 
                       RelativeSource={RelativeSource Mode=FindAncestor, 
                                                      AncestorType=ComboBoxItem}}"
                   Value="{x:Null}">
        <Setter TargetName="Column1" Property="Visibility" Value="Hidden" />
        <Setter TargetName="Column3" Property="Visibility" Value="Hidden" />
      </DataTrigger>
    </DataTemplate.Triggers>
  </DataTemplate>
</ComboBox.ItemTemplate>
编辑
我已经更新了 XAML 以展示如何在弹出窗口折叠时将替代格式应用于所选项目(我不确定该区域被称为什么。)
诀窍是下拉区域中的项目包含在ComboBoxItem逻辑树中的对象中。绑定查找该RelativeSource类型的对象作为祖先。
- 如果找到它,它假定该项目在树中(并检查它是否被选中)
 
- 如果未找到 ( 
null),则假定该项目位于组合框区域而不是弹出窗口中 
如果您以某种方式在另一个组合框的项目模板中有一个组合框,这将分崩离析。我不认为我想使用那个用户界面!