C# 如何在Silverlight中确定是用户更改了组合框?

C# 如何在Silverlight中确定是用户更改了组合框?,c#,silverlight,C#,Silverlight,在ComboBox.SelectionChanged事件中,我想知道是谁更改了ComboBox值、用户还是其他代码 首先,我检查了cmbBox.IsDropDownOpen是否为真。但如果用户用键盘更改了组合框,则这是错误的 然后我想检查一下它是否聚焦。Silverlight ComboBox没有IsFocus属性,因此我将状态保存在cmbBoxGotFocus和cmbBoxLostFocus事件处理程序中: private bool cmbBox_isFocused = false;

在ComboBox.SelectionChanged事件中,我想知道是谁更改了ComboBox值、用户还是其他代码

首先,我检查了cmbBox.IsDropDownOpen是否为真。但如果用户用键盘更改了组合框,则这是错误的

然后我想检查一下它是否聚焦。Silverlight ComboBox没有IsFocus属性,因此我将状态保存在cmbBoxGotFocus和cmbBoxLostFocus事件处理程序中:

    private bool cmbBox_isFocused = false;
    private void cmbBox_GotFocus(object sender, RoutedEventArgs e)
    {
        cmbSalesPerson_isFocused = true;
    }

    private void cmbBox_LostFocus(object sender, RoutedEventArgs e)
    {
        cmbSalesPerson_isFocused = false;
    }

不幸的是,这也不起作用,因为有一些奇怪的行为我不明白:当用户单击组合框时,两个事件会一个接一个地触发,因此bool仍然为false。

您是否尝试使用
xxxCombo\u DropDownClosed
事件?

确定
组合框
值已更改是
SelectionChanged
事件。但是,当分配了
ItemsSource
时,也会触发此事件,因此它不是用户更改的绝对指南,而是非常接近的指南


一种方法是为用户控件加载事件中的
SelectionChanged
分配事件处理程序,或者在您知道已分配
ItemsSource
的某个其他点分配事件处理程序。

如果您使用的是(这是WPF和Silverlight应用程序的事实标准,并且有充分的理由),这应该很简单:当组合框的值更改时,Silverlight将自动设置ViewModel的属性。您可以在属性设置器中放入逻辑,以根据需要对更改作出反应。

我想我没有明确说明问题:我想区分用户和代码。我希望我在上次编辑时澄清了这一点

我想没有简单的方法可以做到这一点。我的解决方案是从更改ComboBox值的代码中设置一些标志。这很简单,因为这是我的代码:)