Отображение выбранного элемента по-разному в ComboBox
У меня есть поле со списком, в котором я настроил 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
что отображает элементы по-разному, когда вы прокручиваете страницу вниз по сравнению с закрытой, и вы видите только выбор?
1 ответ
Вы можете сделать это с помощью триггеров:
<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
) тогда предполагается, что элемент находится в поле со списком, а не во всплывающем окне
Это развалилось бы, если бы у вас каким-то образом было поле со списком в шаблоне элемента другого поля со списком. Я не думаю, что хотел бы использовать этот интерфейс, хотя!