【问题标题】:How can I in Silverlight determine if it is the user that changed a ComboBox?如何在 Silverlight 中确定是否是用户更改了 ComboBox?
【发布时间】:2010-11-15 09:44:19
【问题描述】:

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

起初我检查 cmbBox.IsDropDownOpen 是否为真。但如果用户使用键盘更改了 ComboBox,则这是错误的。

然后我想检查它是否集中。 Silverlight ComboBox 没有 IsFocused 属性,因此我将状态保存在 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;
    }

不幸的是,这也不起作用,因为有一些我不明白的奇怪行为:当用户点击 ComboBox 时,两个事件一个接一个地被触发,所以 bool 仍然是 false。

【问题讨论】:

    标签: c# silverlight


    【解决方案1】:

    如果您使用Model-View-ViewModel pattern(这是 WPF 和 Silverlight 应用程序的事实标准,并且有充分的理由),那么这应该是微不足道的:当组合框的值更改时,Silverlight 将设置您的 ViewModel属性自动。您可以将逻辑放入属性设置器中,以根据需要对更改做出反应。

    【讨论】:

      【解决方案2】:

      用于确定ComboBox 值已更改的适当事件是SelectionChanged 事件。然而,这个事件也可以在分配ItemsSource 时触发,因此它不是用户更改的绝对指南,但它非常接近。

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

      【讨论】:

        【解决方案3】:

        您是否尝试过使用xxxCombo_DropDownClosed 事件?

        【讨论】:

          【解决方案4】:

          我想我没有把问题说清楚:我想区分用户和代码。我希望我在最后一次编辑中澄清了这一点。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-08-01
            • 1970-01-01
            • 2015-09-29
            • 2010-10-18
            • 2015-08-17
            • 1970-01-01
            • 1970-01-01
            • 2023-04-04
            相关资源
            最近更新 更多