如何将数据传递到RoutedEventHandler函数

问题描述 投票:0回答:3

我正在研究一个利用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));

我无法弄清楚如何做到这一点,我做的任何事都会导致语法错误。这通常是怎么做的/甚至是可能的?

任何帮助表示赞赏。

c# wpf routed-events
3个回答
0
投票

使用sender参数,如下所示:

private void testing(object o, EventArgs e)
{
     var treeViewItem = o as TreeViewItem;          
}

碰巧发送者对象实际上是触发事件的对象,TreeViewItem就是你的情况


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
投票

您应该使用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将显示项标签。

© www.soinside.com 2019 - 2024. All rights reserved.