【发布时间】:2013-06-13 04:36:26
【问题描述】:
我正在尝试创建一个 WPF ComboBox 控件,该控件在选择某些内容时包含一个清除按钮。该控件应具有两种状态:如果选择了某些内容,则该控件看起来像一个带有清除按钮的标签。如果没有选择,则显示一个普通的 ComboBox。这两种状态如下图所示。
在研究我的问题时,我遇到了以下与我非常相似的 SO 问题:
Adding a button to a combobox in wpf
How to subclass a WPF ComboBox to add an extra button
两者都建议将 ComboBox 子类化,以提供带有额外按钮的修改模板。但这是我有点困惑的地方。 John Bowen 对第二个链接问题的回答表明我应该复制 ComboBox 的默认模板;修改它以包含一个从 Blend 获取模板的按钮。不精通混合我在这里找到了 MSDN 上的模板:
http://msdn.microsoft.com/en-us/library/ms752094(v=vs.85).aspx
我的问题是我不太确定我应该改变什么。查看默认模板,我认为我需要按照以下方式做一些事情:
- 创建一个新的“IsSelected”属性,我可以将触发器挂接到该属性。
- 为 Clear Button 添加一个控件模板,其中触发器附加到 IsSelected 以隐藏按钮。
- 将 IsSelected 触发器附加到 ComboBoxToggleButton 控件模板以在选择时将其隐藏。
- 当 IsSelected 为 true 时,以某种方式重新调整组合框模板中
PART_EditableTextBox文本框的大小。
这看起来是否正确,以及我如何做的任何指示或其他建议,如果我叫错了树。
【问题讨论】:
-
您可以使用转换器(google it)根据选择设置两个控件的可见性。我没有时间举个例子,所以我不会把它作为答案发布
-
您确实需要构建一个新的控件模板,但您需要创建一个新的
VisualState,它会在选择某些内容时打开。如果您利用VisualState,那么当清除按钮将SelectedValue设置为null时,它将正确响应。
标签: c# wpf combobox custom-controls