您可以使用触发器来做到这一点:
<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
),则假定该项目位于组合框区域而不是弹出窗口中
如果您以某种方式在另一个组合框的项目模板中有一个组合框,这将分崩离析。我不认为我想使用那个用户界面!