2

我正在将我的应用程序从 WinForms 转换为 WPF。我在WinForms中遇到了这个问题,如果我清除一个组合框,它不会触发combobox.selectedindexchange。它仅在用户实际更改索引时触发。

这就是我需要的功能。但是在 WPF 中我只能找到 combobox.SelectionChanged。不幸的是,这会在索引更改和清除组合框(任何更改)时触发。

在 WPF 中,如何仅在用户更改索引时触发事件?我假设有一个我缺少的解决方案,就像 WinForms 解决方案一样。我试图不玩带有全局变量的游戏,并且不得不跟踪以前选择的内容……那真是一团糟。

Mouseleave 也是一团糟。

我将不胜感激任何帮助!

4

2 回答 2

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
于 2013-01-15T18:02:54.237 回答
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>

主窗口类:

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
于 2013-01-15T18:05:58.187 回答