代码之家  ›  专栏  ›  技术社区  ›  David Brunelle

在组合框中以不同方式显示所选项目

  •  3
  • David Brunelle  · 技术社区  · 15 年前

    我有一个组合框,我在其中设置了一个 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>
    

    正如您所看到的,我有三列可以让用户看到不同的信息。但是,我希望组合框中的选定项只显示第二列。换句话说,有没有办法 普通项 当你向下滚动时,它以不同的方式显示项目,而当它关闭时,你只看到选择?

    1 回复  |  直到 13 年前
        1
  •  7
  •   Drew Noakes    15 年前

    您可以使用触发器:

    <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 )然后假设该项位于组合框区域而不是弹出窗口中

    如果您在另一个组合框的项目模板中有一个组合框,那么这个组合框就会崩溃。但我不想使用那个用户界面!