我想创建一个自定义控件,它看起来像标准的WPF ComboBox,但是在弹出窗口中,而不是使用ItemsPresenter,将使用另一个自定义控件。因此,我创建了一个新类,该类派生自System.Windows.Controls.Control,并添加了一个IsDropDownOpen属性,并创建了一个样式,实际上是默认ComboBox样式的副本(主要思想是Popup.IsOpen和ToggleButton.IsPressed属性绑定到控件的IsDropDownOpen属性)。问题是,当我在控件外单击时,Popup没有关闭。我查看了Reflector中的ComboBox类,并发现ComboBox使用一些逻辑来在失去鼠标捕获时更新IsDropDownOpen属性。但是,那段代码使用了一些内部类。是否有任何替代方法来确定用户是否单击了控件外部并关闭Popup?
更新:我没有找到在帖子中附加文件的方法,所以我在这里上传了示例项目。
有一个自定义控件,看起来像ComboBox,但它在弹出窗口中有一个TreeView。当您打开弹出窗口并单击控件外部时,它会自动关闭,但如果您打开弹出窗口,展开“Item2”,然后单击弹出窗口外部,则弹出窗口不会关闭。问题是如何解决这个问题?