Вы можете сделать это, создав собственное вложенное свойство SelectionBoxItemTemplate, а затем определив новый шаблон стиля / элемента управления для ComboBox, который использует этот шаблон в предъявителе контента для области поля выбора.
Вот подходящее прикрепленноесвойство:
public class ComboBoxExt
{
public static DataTemplate GetSelectionBoxItemTemplate(DependencyObject obj)
{
return (DataTemplate) obj.GetValue(SelectionBoxItemTemplateProperty);
}
public static void SetSelectionBoxItemTemplate(DependencyObject obj, DataTemplate value)
{
obj.SetValue(SelectionBoxItemTemplateProperty, value);
}
public static readonly DependencyProperty SelectionBoxItemTemplateProperty =
DependencyProperty.RegisterAttached("SelectionBoxItemTemplate", typeof (DataTemplate), typeof (ComboBoxExt),
new PropertyMetadata(null));
}
Чтобы обновить шаблон элемента управления ComboBox, найдите элемент с именем ContentPresenter
внутри элемента с именем ContentPresenterBorder
(стиль по умолчанию для ComboBox можно найти здесь ).Вам необходимо удалить имя ContentPresenter (в противном случае ComboBox будет задавать значения для своих свойств явно через код, игнорируя установленные вами данные).
Вот как должен выглядеть элемент ContentPresenter в настроенном шаблоне элемента управления:
<ContentPresenter Margin="{TemplateBinding Padding}"
Content="{Binding Path=SelectedItem, RelativeSource={RelativeSource TemplatedParent}}"
ContentTemplate="{Binding (a:ComboBoxExt.SelectionBoxItemTemplate), RelativeSource={RelativeSource TemplatedParent}}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
</ContentPresenter>
Наконец, чтобы использовать это, вы должны сделать что-то вроде:
<ComboBox
Style="{StaticResource MyAdjustedComboBoxStyle}"
ItemTemplate="{StaticResource MyDropDownAreaTemplate}"
Behaviors:ComboBoxExt.SelectionBoxItemTemplate="{StaticResource MySelectionAreaTemplate}">