【问题标题】:IntegerUpDown triggering parent control SelectionChanged eventIntegerUpDown 触发父控件 SelectionChanged 事件
【发布时间】:2026-02-26 08:25:02
【问题描述】:

我在每个 ListBoxItem 中有一个带有 IntegerUpDown 的 ListBox 控件。一切正常,但是当 IntegerUpDown 达到我设置的最小值或最大值时,如果我单击禁用的箭头,它将触发列表框的 selectionchanged 事件。 Disabled arrow

private void lbItem_SelectionChanged(Object sender, SelectionChangedEventArgs e)
{    
     if (//e.source != integerupdowncontrol)
         //update other view, etc.  
}

【问题讨论】:

    标签: wpf wpftoolkit integerupdown


    【解决方案1】:

    您是否尝试过挂钩 selectionchanged 事件,检查您的禁用条件,如果禁用,请将 SelectionChangedEventArgs.Handled 设置为 true

    SelectionChangedEventArgs MSDN

    private void OnSelectionChanged(Object sender, SelectionChangedEventArgs args){
          if(/*My min or max has been reached*/){
                args.Handled = true;
                return;
          }
    }
    

    这是另一个example with keypressed

    【讨论】:

    • 我如何检查 selectionchanged 事件是否来自 IntegerUpDown 控件? Source 和 OriginalSource 都指向列表框。除非我知道事件源自 IntegerUpDown,否则我无法处理它。
    • 好吧,除非你发布你的代码,否则我真的无法提供任何进一步的细节@sponge
    • 我通过为 IntegerUpDown 添加一个 MouseLeftButtonDown 事件解决了这个问题,在该事件中我设置了 Handled = true。不过感觉很“骇人听闻”。