ComboBoxItem MouseEnter事件未触发

本文关键字:事件 MouseEnter ComboBoxItem | 更新日期: 2023-09-27 18:05:08

我有以下示例代码。奇怪的是,MouseMove事件正常触发,但是当用MouseEnter替换时,当鼠标移动到ComboBoxItem上时什么也没有发生。知道怎么解决这个问题吗?我实际上需要一个事件发生,当用户悬停在一个ComboBoxItem上,以及另一个事件,当悬停离开项目。

var comboBoxItem1 = new ComboBoxItem();
var comboBoxItem2 = new ComboBoxItem();
cmb.Items.Add(comboBoxItem1);
cmb.Items.Add(comboBoxItem2);
comboBoxItem1.Content = "1";
comboBoxItem1.MouseMove += (s, args) =>
{
    MessageBox.Show("1");
};
comboBoxItem2.Content = "2";
comboBoxItem2.MouseMove += (s, args) =>
{
    MessageBox.Show("2");
};
编辑:

                StackPanel spCondition = new StackPanel();
                spCondition.Orientation = Orientation.Horizontal;
                ComboBox cmbValue1 = new ComboBox();
                cmbValue1.IsTextSearchEnabled = false;
                cmbValue1.IsEditable = true;
                cmbValue1.Width = 70;
                cmbValue1.LostFocus += cmbValue_LostFocus;
                cmbValue1.PreviewMouseLeftButtonDown += cmbValue_MouseLeftButtonDown;
                cmbValue1.SelectionChanged += cmbValue_SelectionChanged;
                Border border = new Border();
                border.Child = cmbValue1;
                spCondition.Children.Add(border);   
private void cmbValue_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        ComboBox cmb = sender as ComboBox;
        cmb.Items.Clear();
        //Iterates through all virtual tables
        foreach (TableContainer table in parentTable.ParentVisualQueryBuilder.ListOpenUnjoinedTables)
        {
            ComboBoxItem item = new ComboBoxItem();
            item.MouseMove += item_MouseMove;
            if (table.IsVirtual == false)
            {
                item.Content = "[" + table.TableDescription + "]";
            }
            else
            {
                item.Content = "[" + table.View.Name + "]";
            }
            item.Tag = table;
            cmb.Items.Add(item);
        }
    }

ComboBoxItem MouseEnter事件未触发

我确定您正在删除ComboBox中的项目:

private void cmbValue_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        ComboBox cmb = sender as ComboBox;
        cmb.Items.Clear();
        //Iterates through all virtual tables
        foreach (TableContainer table in parentTable.ParentVisualQueryBuilder.ListOpenUnjoinedTables)
        {
            ComboBoxItem item = new ComboBoxItem();
            item.MouseMove += item_MouseMove;
            if (table.IsVirtual == false)
            {
                item.Content = "[" + table.TableDescription + "]";
            }
            else
            {
                item.Content = "[" + table.View.Name + "]";
            }
            item.Tag = table;
            cmb.Items.Add(item);
        }
    }

请尝试注释此代码并运行。

更新:

您可以使用以下代码向comoBox添加项:

var comboBoxItem1 = new ComboBoxItem();
var comboBoxItem2 = new ComboBoxItem();
cmb.Items.Add(comboBoxItem1);
cmb.Items.Add(comboBoxItem2);
comboBoxItem1.Content = "1";
comboBoxItem1.MouseMove += (s, args) =>
{
    MessageBox.Show("1");
};
comboBoxItem2.Content = "2";
comboBoxItem2.MouseMove += (s, args) =>
{
    MessageBox.Show("2");
};

用下面的代码修改

var comboBoxItem1 = new Label();//or use textBolck
var comboBoxItem2 = new Label();//or use textBolck
combo.Items.Add(comboBoxItem1);
combo.Items.Add(comboBoxItem2);
comboBoxItem1.Content = "1";
comboBoxItem1.MouseEnter += (s, args) =>
{
     MessageBox.Show("1");
};

comboBoxItem2.Content = "2";
comboBoxItem2.MouseEnter += (s, args) =>
{
     MessageBox.Show("2");
};

尝试使用PreviewMouseEnter事件。因为我猜有一些元素窃取了事件,所以使用隧道事件应该会有所帮助。