C# 加载表单时触发wpf组合更改事件
我遇到了一个问题,当窗口加载时,与“组合框”控件关联的“selection\u change”事件在窗口首次加载时被触发。请问它为什么会发生,如何限制C# 加载表单时触发wpf组合更改事件,c#,wpf,events,C#,Wpf,Events,我遇到了一个问题,当窗口加载时,与“组合框”控件关联的“selection\u change”事件在窗口首次加载时被触发。请问它为什么会发生,如何限制 关于这不是一种正常的行为,在某些情况下,您必须执行一些操作,如设置SelectedItem等,这反过来会触发事件。仔细检查表单的生命周期事件,看看您是否正在做类似的事情,可能是在加载或激活事件中,或者是在构造函数中的某个地方 使用该代码,将不会引发SelectionChanged事件。创建一个新项目,粘贴它并亲自尝试 我的猜测与Sekhar_uu
关于这不是一种正常的行为,在某些情况下,您必须执行一些操作,如设置SelectedItem等,这反过来会触发事件。仔细检查表单的生命周期事件,看看您是否正在做类似的事情,可能是在加载或激活事件中,或者是在构造函数中的某个地方 使用该代码,将不会引发
SelectionChanged
事件。创建一个新项目,粘贴它并亲自尝试
我的猜测与Sekhar_uuPro的几乎相同,您正在从代码隐藏填充您的组合框
,其中的某些内容会导致SelectedItem发生更改。
调查cmbUsers。在cmbUsers\u SelectionChanged
事件处理程序中选择EdItem
,查看它在调试器中是否有值或为null。另外,查看调用堆栈以查找引发此事件的原因
示例代码
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
cmbUsers.Items.Add(new ComboBoxItem { Content = "Test" });
cmbUsers.SelectedIndex = 0;
}
private void cmbUsers_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (cmbUsers.SelectedItem != null)
{
MessageBox.Show(cmbUsers.SelectedItem.ToString());
}
}
}
调用堆栈在事件处理程序中看起来像这样
您确定没有通过编程在构造函数中或代码中的其他位置设置组合框的选定元素吗?如果你这样做,那么事件将被调用。你能告诉我们你处理Combobox的代码吗,可能是你正在做一些触发事件的事情…@shekhar,没什么特别的,在xaml文件中就是这样:代码隐藏中的相应函数正在被调用。正如@Meleak所建议的,在选择更改时设置一个断点,并查看调用堆栈。。如果你不明白,就把它贴在这里。。我们可以看一看并修复它的问题。嗨,我记得,我在win forms应用程序上也有类似的问题,我通过使用“selection\u change\u Committed”事件而不是“selection\u changed”事件解决了它。在WPF中,“提交”版本不存在:(