您可以使用触发器:
<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
)然后假设该项位于组合框区域而不是弹出窗口中
如果您在另一个组合框的项目模板中有一个组合框,那么这个组合框就会崩溃。但我不想使用那个用户界面!