我似乎无法为ComboBoxItem设置ContentTemplate。我试图做到这一点的原因是我想为组合框中的数据出现两次。当组合框打开(菜单向下)时,我需要一个文本框(带有图像的名称)和一个位于其下方的图像控件。当我选择该项目时,我希望组合框只显示一个带有图像名称的文本框。如何在Silverlight组合框中为选定和下拉状态使用不同的模板?
我想我可以通过修改组合框的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中的代码可能依赖于它)。
任何帮助显示组合框与不同的下拉菜单和选定的模板将不胜感激!
真的很有帮助。谢谢。只是为了澄清,我正在努力取代'SelectedObject',尽管现在看起来很明显。我对ContentPresenter的代码片段看起来是这样的: DataTemplate> ContentPresenter.ContentTemplate> ContentPresenter> –
2011-10-17 16:10:14