WPF ComboBox设置ItemContainerStyle后ItemTemplateSelector失效问题
问题原因
你自定义的ComboBoxItem样式中重写了控件模板,模板内的ContentPresenter仅显式绑定了Content、ContentTemplate、ContentStringFormat属性,遗漏了ContentTemplateSelector属性的绑定。
WPF的内容呈现逻辑中,ContentPresenter如果没有收到有效的ContentTemplateSelector值,就会跳过模板选择器的执行逻辑,直接使用ContentTemplate渲染内容。默认的ComboBoxItem内置模板会自动继承父级ComboBox设置的ItemTemplateSelector,但你重写模板后没有手动补充该绑定,导致选择器失效。
解决方法
修改ComboBoxItem控件模板中的ContentPresenter代码,补充ContentTemplateSelector的模板绑定即可:
<ContentPresenter Content="{TemplateBinding ContentControl.Content}" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" <!-- 新增下面这行绑定 --> ContentTemplateSelector="{TemplateBinding ContentControl.ContentTemplateSelector}" ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}" HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding Control.VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />
修改后重新运行,SelectTemplate方法就会被正常触发,下拉项模板和选中项模板的切换逻辑也会正常生效。
内容的提问来源于stack exchange,提问作者Cod Fish
相关产品推荐
相关产品推荐

