.net 在组合框中以不同方式显示选定项
我有一个组合框,在其中我设置了一个.net 在组合框中以不同方式显示选定项,.net,wpf,combobox,selecteditem,.net,Wpf,Combobox,Selecteditem,我有一个组合框,在其中我设置了一个ItemTemplate,看起来像这样: <ComboBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding Piece.NoPiece}" Width="50" /> <TextBlock Text="{Binding Piece.De
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>
正如您所看到的,我有三列,让用户可以看到不同的信息。但是,我希望组合中的选定项仅显示第二列。换句话说,有没有一种方法可以让
ItemTemplate
在向下滚动时以与关闭时不同的方式显示项目,并且您只能看到所选内容?您可以使用触发器:
<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,以显示在弹出窗口折叠时如何将替代格式应用于所选项目(我不确定该区域的名称)
诀窍在于,下拉区域中的项包含在逻辑树中的comboxItem
对象中。RelativeSource
绑定查找该类型的对象作为祖先
- 如果找到该项,则假定该项位于树中(并检查是否选中该项)
- 如果未找到该项(
),则假定该项位于组合框区域而不是弹出框中null
如果您在另一个组合框的项目模板中有一个组合框,那么这将崩溃。但我不想使用这个UI 运气好吗?我的解决方案对你有用吗?这不是我想要的。当我选择一个项目时,当组合框关闭时,细节仍然显示。但当我重新打开列表寻找另一个答案时,它确实隐藏了细节。这背后的想法是,当组合框显示为“文本框”时,我希望用户只看到第二列,但当我打开它时,我将能够看到详细信息。如果不可能,也没关系。这是一个“拥有就好”的功能,不是必需的。我已经更新了我的答案,以展示如何做你想要的。太好了!但是,我自己无法解决此问题。但是,这会生成绑定异常:
无法找到引用为“RelativeSource FindAncestor,AncestorType='System.Windows.Controls.ComboBoxItem',AncestorLevel='1''的绑定源。
。我认为设置ItemTemplateSelector
是一种更好的方法。以下是一个例子: