I have a ComboBox
with fairly complex template for individual items, which includes two images and several lines of text:
However, the selected item in the ComboBox
itself doesn't display correctly, because the vertical space is too limited (I can't make it higher, because it is a part of a ToolBar
).
How can I make the ComboBox use a different template for the item which is displayed in the ComboBox
itself? (the default ToString
representation would do just fine)
Thanks!
You can use "ComboBoxItem. PreviewMouseDown" event.
You can get or set the combo box's selected item by using the SelectedItem property, and get or set the index of the selected item by using the SelectedIndex property.
A combobox is a selection control that combines a non-editable textbox and a drop-down listbox that allows users to select an item from a list. It either displays the current selection or is empty if there is no selected item.
The selected item (in the ComboBox
itself, not the dropdown) is not inside a ComboBoxItem
so you can do something like this:
<ComboBox.ItemTemplate>
<DataTemplate>
<ContentControl Content="{Binding}">
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<!-- Complex default template -->
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Image Source="{Binding XPath=media:thumbnail/@url}" Width="100" Height="100" />
</DataTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<!-- Simple selection box template -->
<DataTrigger
Binding="{Binding RelativeSource={RelativeSource AncestorType=ComboBoxItem}}"
Value="{x:Null}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="{Binding XPath=title}" />
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
</DataTemplate>
</ComboBox.ItemTemplate>
(Edit: Note that the binding in the for the selection box will throw errors because the RelativeSource
is not found. There are various options of circumventing this, one being a custom value converter that returns true
or false
depending on whether the ancestor exists (manual tree walking).)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With