あなたはトリガーでそれを行うことができます:
<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
)は、アイテムがポップアップではなくコンボボックス領域にあると見なします
どういうわけか、別のコンボボックスのアイテムテンプレート内にコンボボックスがある場合、これは崩壊します。私はそのUIを使いたくないと思います!