【发布时间】:2011-02-16 14:36:26
【问题描述】:
我想创建一个看起来像标准 WPF ComboBox 的自定义控件,但是在弹出窗口中没有ItemsPresenter 而是另一个自定义控件。因此,我创建了一个派生自System.Windows.Controls.Control 的新类,添加了一个IsDropDownOpen 属性并创建了一个实际上是默认ComboBox 样式副本的样式(主要思想是Popup.IsOpen 和ToggleButton.IsPressed 属性是绑定到控件的IsDropDownOpen 属性)。
问题是当我在控件外部单击时,Popup 没有关闭。
我查看了反射器中的ComboBox 类,发现ComboBox 在失去鼠标捕获时使用了一些逻辑来更新IsDropDownOpen 属性。但是该代码使用了一些内部类。是否有其他方法可以确定用户是否在控件外部单击并关闭Popup?
UPD:我没有找到附加文件的方法来发布,所以我上传了示例项目here
有一个看起来像 ComboBox 的自定义控件,但它在弹出窗口中有一个 TreeView。当您打开弹出窗口并在控件外部单击时,它会自动关闭,但如果您打开弹出窗口,展开“Item2”,然后在弹出窗口外部单击不会关闭。问题是如何解决这个问题?
【问题讨论】:
-
@RQDQ:你到底需要什么?控制模板?正如我所说,它与默认组合框模板相同,但没有 ItemsPresenter,而是有一个其他控件。
-
我们想看看您已经拥有什么,这样我们就不必为了帮助您而重新发明轮子。
-
@RQDQ - 我用示例项目的链接和其他问题更新了我的原始帖子。
标签: wpf combobox wpf-controls popup