3

次のようなコンボボックスを設定しましたItemTemplate

<ComboBox.ItemTemplate>
  <DataTemplate>
    <StackPanel Orientation="Horizontal">
      <TextBlock Text="{Binding Piece.NoPiece}" Width="50" />
      <TextBlock Text="{Binding Piece.Description}" Width="170" />
      <TextBlock Text="{Binding Piece.Categorie.NomCategorie}" />
    </StackPanel>
  </DataTemplate>
</ComboBox.ItemTemplate>

ご覧のとおり、ユーザーがさまざまな情報を表示できるようにする3つの列があります。ただし、コンボで選択したアイテムには2列目のみを表示させたいのですが。ItemTemplateつまり、下にスクロールしたときと閉じて選択範囲のみが表示されたときで、アイテムを異なる方法で表示する方法はありますか?

4

1 に答える 1

8

あなたはトリガーでそれを行うことができます:

<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を使いたくないと思います!

于 2009-09-23T15:15:09.483 に答える