2017-10-24 4 views
-1

Ich versuche, einige Werte zu aktualisieren, während der Benutzer über die Elemente einer ComboBox schwebt. Ein Beispiel wäre:C# wpf ist ein Maus Hover-Ereignis für ComboBox

enter image description here

Das ausgewählte Element dieser ComboBox ist derzeit 40. Aber hier würde Ich mag ein Ereignis haben die entlassen werden, wenn der Benutzer den Mauszeiger über den Wert von 66. Die Aktion bewegt Ich versuche, die Schriftgröße in einem anderen TextBox dynamisch zu ändern, wenn Benutzer durch die Zahlen innerhalb dieser ComboBox schwebt. Danke für jede Hilfe.

+1

Sicher kannst du. Implementieren Sie eine Hover-Methode für die 'comboBox'-Elemente. Binden Sie einfach das Ereignis in XAML und implementieren Sie die Methode in Ihrem Code. So funktioniert übrigens SO nicht. Machen Sie etwas Anstrengung in der Forschung und versuchen Sie es selbst, bevor Sie fragen. –

+0

Wie lautet der Name dieses Hover-Ereignisses? Ist es myComboBox.Items.CurrentChanging oder eine andere Sache? Und wie kann ich den Gegenstand, der gerade schwebt, fangen? –

+0

@alikerimerkan CurrentChanging klingt ziemlich unwahrscheinlich, basierend auf dem Namen. Mausereignisse haben das Wort "Maus" im Namen. Sie können das selbst herausfinden. Sie können die MSDN-Dokumentation durchsuchen oder mit intellisense durch die Eigenschaften blättern. Die Ereignisse haben kleine Blitzsymbole neben ihnen. –

Antwort

1

Es ist ein wenig unklar, was Sie zu tun versuchen, aber wenn Sie eine Aktion ausführen möchten, wenn die Maus bewegt sich über eine ComboBoxItem, erhalten Sie einen ItemContainerStyle und ein DependencyPropertyDescriptor verwenden:

DependencyPropertyDescriptor dpd; 
private void ComboBox_Loaded(object sender, RoutedEventArgs e) 
{ 
    ComboBoxItem cmb = sender as ComboBoxItem; 
    dpd = DependencyPropertyDescriptor 
     .FromProperty(IsMouseOverProperty, typeof(ComboBoxItem)); 
    if (dpd != null) 
     dpd.AddValueChanged(cmb, OnIsMouseOver); 

} 

private void ComboBox_Unloaded(object sender, RoutedEventArgs e) 
{ 
    if (dpd != null) 
     dpd.RemoveValueChanged(cmb, OnIsMouseOver); 

} 

private void OnIsMouseOver(object sender, EventArgs e) 
{ 
    ComboBoxItem cmb = sender as ComboBoxItem; 
    if (cmb.IsMouseOver) 
    { 
     //do something... 
    } 
} 

<ComboBox x:Name="cmb"> 
    <ComboBox.ItemContainerStyle> 
     <Style TargetType="ComboBoxItem"> 
      <EventSetter Event="Loaded" Handler="ComboBox_Loaded" /> 
      <EventSetter Event="Unloaded" Handler="ComboBox_Unloaded" /> 
     </Style> 
    </ComboBox.ItemContainerStyle> 
</ComboBox> 
+0

Das half, die Ereignisse zu reagieren, wenn der Benutzer über die Werte der Combobox schwebt. Allerdings habe ich den Click-Events-Handler wie folgt implementiert: 'cmb.PreviewMouseLeftButtonDown + = OnMouseLeftBtnDown;'. Vielen Dank –