6

次のサンプルコードがあります。奇妙なことに、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);
        }
    }
4

2 に答える 2

0

このコードで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");
};
于 2013-03-20T15:08:01.443 に答える
0

PreviewMouseEnter イベントを使用してみてください。イベントを盗む要素があると推測しているため、トンネリングイベントを使用すると役立つはずです。

于 2013-03-20T15:56:33.380 に答える