WPF 实现在Combobox下拉菜单展开,未选择,直接点击button自动收起下拉菜单,并响应button绑定事件

发布时间 2023-06-19 16:48:38作者: 盛沧海

在正常情况下,下拉菜单展开后,我们都会选择一个合适的选项;

但是在某些时候,展开下拉菜单后,发现并不需要选择一个选项,只是需要进行后续操作,然后这时在点击其他位置的button时,你会发现:只有combobox的下拉菜单收起来了,但是button的绑定事件并未响应……

 

为了实现未选择下拉菜单,点击button时combobox能收起下拉菜单,并响应button的click事件,小子采用了下述方法(谁有更好办法,请留言指教):

  private void DropDownOpenFalse()
        {
            comboBox.IsDropDownOpen = false;
            comboBox2.IsDropDownOpen = false;
            comboBox3.IsDropDownOpen = false;
        }

        Dictionary<object, ICommand> keyValues = new Dictionary<object, ICommand>();
        private void IniKeyValue()
        {
            keyValues.Add(MainNeedleButton_CB, VM.SendMainNeedleData);
            keyValues.Add(FixedNeedleButton1_CB, VM.SendFixedNeedle1Data);
            keyValues.Add(FixedNeedleButton2_CB, VM.SendFixedNeedle2Data);
            keyValues.Add(FixedNeedleButton3_CB, VM.SendFixedNeedle3Data);
        }

        //为了解决combobox在下拉菜单打开,没做任何选择,直接点击按键时,按钮的click事件不响应
        private void NeedleButton_CB_PreviewMouseUp(object sender, MouseButtonEventArgs e)
        {
            DropDownOpenFalse();
            keyValues[(Button)sender].Execute(null);
        }
DropDownOpenFalse 为了将3个下拉菜单都收起。
IniKeyValue       实例化时,初始化keyValues。
NeedleButton_CB_PreviewMouseUp 调用button的PreviewMouseUp事件,实现收起下拉菜单,并调用绑定的ICommand执行。


为了方便添加button或其他控件,将button与执行的ICommand用Dictionary进行了键值绑定,同时也简化了代码……