我尝试在旧版WPF应用程序中记录所有用户交互(按钮点击,列表选择更改等)。我通过继承所有Windows控件类(Button,TextBox,ComboBox等)并覆盖某些函数(例如Button子类中的OnClick())来记录这些事件发生的时间。
问题是应用程序中的几乎所有控件都使用数据绑定,当加载页面时,它会启动所有这些元素并自动调用事件处理程序。我只想在用户更改这些控件时记录这些。
当我记录时,是否有一种优雅的方法可以跳过数据绑定触发的事件?
答案 0 :(得分:1)
在事件处理程序中,构造一个System.Diagnostics.StackTrace
,其中包含从事件处理程序一直到应用程序的Main方法的所有堆栈帧。
System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace();
System.Diagnostics.Debug.WriteLine(trace.ToString());
以SelectionChanged
事件为例,如果事件是由数据绑定触发的,那么应该有一些框架看起来像
at System.Windows.Controls.ItemsControl.OnItemsSourceChanged(DependencyObject d,DependencyPropertyChangedEventArgs e)
...at System.Windows.Controls.ItemsControl.set_ItemsSource(IEnumerable value)