我似乎无法为 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}"
/>
我可以让它工作的唯一方法是从 ItemContainerStyle 中删除 ContentPresenter,并将其替换为我的自定义模板 (ComboBoxItemTemplate) 的内容。但我认为我不应该使用这种方法,因为这意味着 ContentPresenter 不再存在(并且 ComboBox 中的代码可能依赖于它的存在)。
任何有关显示具有不同下拉列表和选定模板的组合框的帮助将不胜感激!