ComboBoxItem の ContentTemplate を設定できないようです。私がこれをやろうとしている理由は、コンボ ボックスに自分のデータを 2 つ表示したいからです。コンボ ボックスが開いている (メニューがダウンしている) 場合、テキスト ボックス (画像の名前) とその下に画像コントロールが必要です。アイテムを選択すると、コンボ ボックスに画像の名前を含むテキスト ボックスが表示されます。
これは、ComboBox の ItemTemplate と ItemContainerStyle を変更することで実現できると考えました。ItemContainerStyle には、次の ContentPresenter が含まれています。
<ContentPresenter HorizontalAlignment="Left" Margin="{TemplateBinding Padding}" x:Name="contentPresenter" Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}"/>
したがって、ここで ContentTemplate を設定するだけで機能すると想定しました。しかし、私はそれを機能させることができないようです:
<DataTemplate x:Key="ComboBoxDataTemplate">
<Grid>
<TextBlock Text="{Binding Path='Name'}"/>
</Grid>
</DataTemplate>
<DataTemplate x:Key="ComboBoxItemTemplate">
<StackPanel>
<TextBlock Text="{Binding Path='Name'}"/>
<Image Source="{Binding Path='Source'}" Width="64" Height="64"/>
</StackPanel>
</DataTemplate>
<Style x:Key="ComboBoxItemStyle1" TargetType="ComboBoxItem">
...
<Setter Property="ContentTemplate" Value="{StaticResource ComboBoxItemTemplate}"/>
...
これが私のコンボボックスです:
<ComboBox Width="70" Margin="3,0,0,0"
ItemsSource="{StaticResource Source}"
ItemTemplate="{StaticResource ComboBoxDataTemplate}"
ItemContainerStyle="{StaticResource ComboBoxItemStyle1}"
/>
これを機能させる唯一の方法は、ContentPresenter を ItemContainerStyle から削除し、それをカスタム テンプレート (ComboBoxItemTemplate) のコンテンツに置き換えることです。しかし、ContentPresenter が存在しなくなったことを意味するため、このアプローチを使用する必要があるとは思いませんでした (また、ComboBox 内のコードは既存のものに依存している可能性があります)。
別のドロップダウンと選択されたテンプレートを使用してコンボ ボックスを表示する際のヘルプをいただければ幸いです。