2013-03-20 19 views
6

Mam następujący przykładowy kod. Co dziwne, zdarzenia MouseMove wystrzeliwują prawidłowo, jednak po zastąpieniu MouseEnter nic się nie dzieje, gdy mysz porusza się nad ComboBoxItem. Jakiś pomysł jak to naprawić? Tak naprawdę potrzebuję zdarzenia, które wystąpi, gdy użytkownik unosi się ponad ComboBoxItem, a także innego zdarzenia, gdy po najechaniu opuszcza przedmiot.Zdarzenie ComboBoxItem MouseEnter nie odpala

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"); 
}; 

EDIT:

   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); 
     } 
    } 
+0

Czy możesz spróbować wstawić punkt przerwania w linii MessageBox.Show, aby sprawdzić, czy się zatrzymuje? – Yahya

+0

@Yahya - Nawet nie wchodzi do bloku! – WPF

+1

"Wydarzenia w systemie Windows" sugerowałyby coś innego. Naprawiono twój tytuł. – spender

Odpowiedz

0

Jestem pewny usuwasz elementy w ComboBox w tym kodzie:

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); 
     } 
    } 

Spróbuj skomentować ten kod i uruchomić.

UPDATE:

masz ten kod, aby dodać elementy do 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"); 
}; 

zmienić go z tego kodu.

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"); 
}; 
+0

Niestety, rejestruję moje zdarzenie MouseEnter chociaż – WPF

+0

Tak, masz rację. Najpierw usuwasz wszystkie elementy i dodajesz nowe elementy do comboBox. W takim przypadku nie będzie można zobaczyć MessegeBox. – Dilshod

+0

Ale dlaczego działa, jeśli podstawię MouseEnter z MouseMove?Ten sam kod, tylko inne zdarzenie – WPF

0

Spróbuj użyć zdarzenia PreviewMouseEnter. ponieważ zgaduję, że jest jakiś element, który kradnie wydarzenie, więc pomoc w tunelowaniu powinna pomóc.

+0

PreviewMouseEnter nie wydaje się istnieć dla ComboBoxItem – WPF

Powiązane problemy