我正在将我的应用程序从WinForms转换为WPF。我遇到了这个问题,如果我清除一个组合框,在WinForms中,它不会触发combobox.selectedindexchange。它仅在用户实际更改索引时触发。
这就是我需要的功能。但是在WPF中我只能找到combobox.SelectionChanged。不幸的是,这会触发索引更改和清除组合框(任何更改)。
在WPF中,如何在用户更改索引时才触发事件?我假设有一个我想念的解决方案,就像WinForms解决方案一样。我试图不玩全局变量的游戏,并且必须跟踪之前选择的内容....这是一团糟。
Mouseleave也是一团糟。
我非常感谢任何帮助!
答案 0 :(得分:1)
在您的情况下,您可以在SelectionChanged
事件中实施:
Private Sub OnSelectionChanged(sender As System.Object, e As System.Windows.Controls.SelectionChangedEventArgs)
Dim combo = TryCast(sender, ComboBox)
If combo.SelectedItem IsNot Nothing Then
'do something
End If
End Sub
答案 1 :(得分:1)
您可以删除事件处理程序,调用clear方法并再次添加事件处理程序。
示例代码:
<StackPanel>
<ComboBox Name="myCB"
SelectionChanged="ComboBox_SelectionChanged">
<ComboBoxItem>test1</ComboBoxItem>
<ComboBoxItem>test2</ComboBoxItem>
<ComboBoxItem>test3</ComboBoxItem>
</ComboBox>
<Button Content="Clear" Click="Button_Click" />
</StackPanel>
MainWindow类:
Class MainWindow
Private Sub ComboBox_SelectionChanged(sender As System.Object, e As System.Windows.Controls.SelectionChangedEventArgs)
Console.WriteLine("Selected index: {0}", CType(sender, ComboBox).SelectedIndex)
End Sub
Private Sub Button_Click(sender As System.Object, e As System.Windows.RoutedEventArgs)
RemoveHandler Me.myCB.SelectionChanged, AddressOf ComboBox_SelectionChanged
Me.myCB.Items.Clear()
AddHandler Me.myCB.SelectionChanged, AddressOf ComboBox_SelectionChanged
End Sub
End Class