我正在尝试创建一个WPF ComboBox控件,当某些内容被选中时,该控件会包含一个清除按钮。该控件应具有两种状态:如果选择了某些内容,则该控件看起来像带有清除按钮的标签。如果没有选择任何内容,则显示普通ComboBox。下面的图片展示了这两种状态。
在研究我的问题时,我发现了以下与我的问题非常相似的SO问题:
两者都建议对ComboBox进行子类化,并提供具有额外按钮的修改模板。但这就是我有点困惑的地方。第二个链接问题的John Bowen的答案表明,我应该复制ComboBox的默认模板;从Blend中获取模板并进行修改以包含按钮。由于不熟练使用Blend,我在MSDN上找到了模板:
http://msdn.microsoft.com/en-us/library/ms752094(v=vs.85).aspx
我的问题是我不太确定我应该做什么改变。查看默认模板,我认为我需要做以下操作:- 创建一个新的“IsSelected”属性,我可以将触发器连接到该属性。
- 添加一个带有触发器的“清除按钮”控件模板,以隐藏该按钮。
- 将IsSelected触发器附加到ComboBoxToggleButton控件模板上,在选择后隐藏它。
- 当IsSelected为true时,以某种方式调整ComboBox模板中的PART_EditableTextBox文本框的大小。
VisualState
,当某些东西被选中时它会被打开。如果你利用VisualState
,那么当清除按钮将SelectedValue
设置为null
时,它将会正确响应。 - Mike Perrenoud