如何将数据传递到RoutedEventHandler函数

时间:2018-08-30 15:23:11

标签: c# wpf routed-events

我正在使用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));

我不太清楚该怎么做,我做的任何事情都会导致语法错误。正常情况下该怎么做?甚至有可能吗?

感谢您的帮助。

3 个答案:

答案 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