我正在使用WPF的C#应用程序上工作,当前正在寻找当TreeViewItem对象获得焦点时触发事件。我已经使用以下代码以非常基本的方式实现了这一点:
分配事件:
TreeViewItem chr = new TreeViewItem();
chr.GotFocus += new RoutedEventHandler(testing);
实际的处理程序:
private void testing(object o, RoutedEventArgs e)
{
MessageBox.Show("TESTING");
}
这很简单,但是我也希望能够使用eventhandler方法内部对象的数据。与此类似:
TreeViewItem chr = new TreeViewItem();
chr.GotFocus += new RoutedEventHandler(testing(chr));
我不太清楚该怎么做,我做的任何事情都会导致语法错误。正常情况下该怎么做?甚至有可能吗?
感谢您的帮助。
答案 0 :(得分:2)
private void SomeFunction()
{
TreeViewItem chr = new TreeViewItem();
chr.GotFocus += testing; // Event directly, no wrapper.
}
private void testing(object sender, RoutedEventArgs e) // it's RoutedEventArgs, not EventArgs
{
var chr = sender as TreeViewItem; // convert to item
//do your rest work
}
答案 1 :(得分:1)
您应该使用SelectedItemChanged事件。检查下一个示例:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
tree.SelectedItemChanged += Tree_SelectedItemChanged;
}
private void Tree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
MessageBox.Show(((TreeViewItem)e.NewValue).Header.ToString());
}
}
该方法将在e参数的“ NewValue”属性中接收TreeViewItem,因此,MessageBox将显示项目标签。
答案 2 :(得分:0)
使用sender
参数,如下所示:
private void testing(object o, EventArgs e)
{
var treeViewItem = o as TreeViewItem;
}
碰巧发件人对象实际上是触发事件的对象,即您的案例的TreeViewItem