WPF Combobox:文本框和下拉列表中的不同模板
这是我的combobox。
如何更改它,以便只有FullName出现在combobox的文本框部分中,而所有三列仍然出现在下拉部分?
不幸的是, SelectionBoxItemTemplate
是一个只读属性,所以我们需要做更多的工作。 通过将ItemTemplate
作为选择时项目的显示方式,可以编辑ItemContainerStyle
以提供包含要显示的其他字段的ControlTemplate
。
对于ComboBoxItem
模板,我只修改了默认模板,因此它应该是完全正常的。
如果ComboBox的IsEditable属性设置为True,则可以将ComboBox的“TextSearch.TextPath”属性设置为要显示的属性名称。 所以在你的情况下:
我没有使用只读的SelectionBoxItemTemplate属性,而是创建了一个新的(附加的,可写的)属性,并使用了我的风格。 我还为我的风格添加了一个触发器,以便不破坏所有未使用我的新附加属性的combobox…
像这样用它:
... Template for the selection box ... ... Template for the popup ...
您只需将此类添加到项目中:
public class ComboBoxSelectionBoxAltTemplateBehaviour { public static readonly DependencyProperty SelectionBoxAltTemplateProperty = DependencyProperty.RegisterAttached( "SelectionBoxAltTemplate", typeof (DataTemplate), typeof (ComboBoxSelectionBoxAltTemplateBehaviour), new PropertyMetadata(default(DataTemplate))); public static void SetSelectionBoxAltTemplate(DependencyObject element, DataTemplate value) { element.SetValue(SelectionBoxAltTemplateProperty, value); } public static DataTemplate GetSelectionBoxAltTemplate(DependencyObject element) { return (DataTemplate) element.GetValue(SelectionBoxAltTemplateProperty); } }
并更改您的ComboBox样式以使用SelectionBoxAltTemplate附加属性(如果设置)(或因为我无法将触发器设置为“not null”),如果附加的为null,则将其设置回默认的SelectionBoxItemTemplate:
ComboBox样式的ControlTemplate中的ContentPresenter:
并且触发器在没有附加属性的情况下向ComboBoxed提供向后兼容性:
...
完整风格:
但是,这可能不适用于ItemTemplateSelctors,只能使用一个模板 – 但您可以轻松添加附加属性“SelectionBoxAltTemplateSelector”,它提供选择器并将其传递给样式。
如果您不想更改ComboBox样式,那么您的问题可以得到很好的答案: https : //stackoverflow.com/a/2277488/1070906
它在DataTemplate中使用Trigger,它在可视树中查看上面某处的ComboBoxItem,而在选择框中则不是这种情况。
上述就是C#学习教程:WPF Combobox:文本框和下拉列表中的不同模板分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/991152.html