在开发简单的Windows窗体UI应用程序时,我正在尝试创建一个效果来显示和关闭鼠标事件的下拉列表。
我可以通过设置MouseMove
来打开comboBox.DroppedDown = true;
事件的下拉列表
但是,当我在comboBox.DroppedDown = false;
事件上设置MouseLeave
来关闭它时,这种情况不起作用。
不知道这里到底需要做什么。
问题出在MouseLeave
下拉列表不会失去焦点,因此除非您从列表中选择一个项目,否则它不会关闭。它等待用户从列表中选择一个项目。
如果它可能失去对MouseLeave
的关注,那就行了。
请提出任何建议。
答案 0 :(得分:2)
首先,我必须说我不是一位经验丰富的程序员,而我刚开始使用WPF。 我知道这个问题是两年了,但是我遇到了同样的问题,我发现我可以使用事件 IsMouseDirectlyOverChanged 关闭ComboBox的下拉列表。对我来说真正烦人的是我有一个ComboBox和一个按钮,如果打开下拉菜单而没有做出选择,我想点击按钮,第一次点击没有任何反应,因为在第一次点击下拉菜单菜单正在关闭。在此之后我可以点击按钮。
对我来说它工作正常:如果我向任何方向(向上,向左,向下,向右)移动鼠标并且消息附加到文本框控件,则下拉列表关闭。我不知道这个事件是新事物还是2年前也可以使用。
private void comPortList_IsMouseDirectlyOverChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (comPortList.IsDropDownOpen==true)
{
txtMsgBox.AppendText("MouseDirectlyOverChanged\n");
txtMsgBox.ScrollToEnd();
comPortList.IsDropDownOpen = false;
}
}
当鼠标指针悬停在打开的ComboBox上时,会触发此事件。如果您没有打开下拉列表,则不会触发。
我已经看到的另一件事是当你进入已打开的ComboBox时以及离开时触发此事件。如果我在检查IsDropDownOpen属性是否为true之前附加文本,那么文本" MouseDirectlyOverChanged"当鼠标指针离开oppened ComboBox时,我的文本框中会出现两次。
如果我对该行发表评论:
comPortList.IsDropDownOpen = false;
并在之前保留AppendText和ScrollToEnd,文本只会附加一次。
我希望这会有所帮助:)
答案 1 :(得分:0)
听起来我需要使用MouseEnter事件而不是MouseMove。它不能在MouseLeave上工作的原因是因为你的鼠标正在移动,而这只会再次将它设置为真。