【问题标题】:How do I get a ComboBox SelectionChanged event to fire from a nested ListBoxItem?如何让 ComboBox SelectionChanged 事件从嵌套的 ListBoxItem 中触发?
【发布时间】:2010-12-10 14:29:42
【问题描述】:

这是一个相当复杂的问题,我现在真的很困惑。任何帮助将不胜感激。

设置:
A 类用户控件列表框
->A 类用户控件的 ListBoxItem
-->B 类用户控件的列表框
--->B 类用户控件的ListBoxItem
---->C 类用户控件的列表框
----->C类UserControl的ListBoxItem(包含ComboBox)

换句话说,A 类控件具有 B 类控件的 ListBox,而 B 类控件具有 C 类控件的 ListBox。所有控件本质上都是分层的。 A 类包含加载 B 类控件所需的数据,B 类包含加载 C 类控件所需的数据。 Type C 控件中有一个标准的组合框,用于更改当前项目的值。除了上述结构之外,我还在 Type A 和 Type B UserControl 级别上拖放与 PreviewMouseLeftButtonDown 事件相关联,以处理 GUI 中的重新排序/删除/等命令。所有这些都按预期工作。

问题:
当我尝试更改 ComboBox 中的值时,SelectionChanged 事件永远不会在 Type C“级别”上触发,除非我足够小心地单击任何 Type A 或 B 控件之间的边框/间距。当我的 ComboBox 弹出菜单与位于自身下方的 A 型或 B 型控件重叠时,就会发生这种情况。类型 A 或 B 的选择事件正在触发而不是类型 C 事件,因此 ComboBox 永远不会可靠地更改其值。在调试器中,用于处理拖放的代码在位于 ComboBox 下方的下一个 ListBoxItem 上触发。

想法:
有没有一种方法可以让我的 ComboBox 弹出窗口在它后面的项目上流行,同时在 ListBox 中双重嵌套(即,在它打开时忽略它后面的任何内容)?
有没有办法将错误触发的 SelectionChanged 事件重新路由到应该触发它们的 ComboBox?

【问题讨论】:

    标签: wpf events combobox listbox nested


    【解决方案1】:

    所以我想出了答案。我必须向 Type A 和 B 控件添加一个属性,以递归检查是否有任何 ComboBoxes 打开。当拖放函数内部发生任何选择事件时,我会在处理拖放之前检查属性。如果有任何 ComboBoxes 打开,我只需调用 Exit Sub 并正确处理点击事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-17
      • 2014-03-26
      • 1970-01-01
      • 2012-02-03
      • 2014-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多