我有一个 ComboBox
单个项目的模板相当复杂,其中包括两个图像和几行文本:
但是,ComboBox
中的选定项本身不能正确显示,因为垂直空间太有限(我不能让它更高,因为它是 ToolBar
的一部分)。
如何使 ComboBox 对 ComboBox
中显示的项目使用不同的模板本身? (默认 ToString
表示就可以了)
谢谢!
最佳答案
所选项目(在 ComboBox
本身中,而不是下拉列表中)不在 ComboBoxItem
中所以你可以做这样的事情:
<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>
( 编辑: 请注意,选择框中的绑定(bind)会抛出错误,因为找不到
RelativeSource
。有多种方法可以规避这一点,其中一种是返回 true
的自定义值转换器。或 false
取决于祖先是否存在(手动树行走)。)
关于wpf - 组合框下拉列表中的项目和选定项目的不同模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8279107/