如何将数据传递到 RoutedEventHandler 函数
How to pass data into a RoutedEventHandler function
我正在开发一个使用 WPF 的 C# 应用程序,目前希望在 TreeViewItem 对象获得焦点时触发一个事件。我已经使用以下代码以非常基本的方式实现了这一点:
分配事件:
TreeViewItem chr = new TreeViewItem();
chr.GotFocus += new RoutedEventHandler(testing);
实际处理人:
private void testing(object o, RoutedEventArgs e)
{
MessageBox.Show("TESTING");
}
这很简单,但我还希望能够在事件处理程序方法中使用对象中的数据。类似这样的事情:
TreeViewItem chr = new TreeViewItem();
chr.GotFocus += new RoutedEventHandler(testing(chr));
我不太明白该怎么做,我做的任何事情都会导致语法错误。这通常是如何完成的/甚至可能吗?
感谢任何帮助。
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
}
您应该使用 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());
}
}
该方法将在 "NewValue" 属性 的 e 参数中接收 TreeViewItem,因此 MessageBox 将显示项目标签。
使用 sender
参数,如下所示:
private void testing(object o, EventArgs e)
{
var treeViewItem = o as TreeViewItem;
}
碰巧发件人对象实际上是触发事件的对象,对于您的情况是 TreeViewItem
我正在开发一个使用 WPF 的 C# 应用程序,目前希望在 TreeViewItem 对象获得焦点时触发一个事件。我已经使用以下代码以非常基本的方式实现了这一点:
分配事件:
TreeViewItem chr = new TreeViewItem();
chr.GotFocus += new RoutedEventHandler(testing);
实际处理人:
private void testing(object o, RoutedEventArgs e)
{
MessageBox.Show("TESTING");
}
这很简单,但我还希望能够在事件处理程序方法中使用对象中的数据。类似这样的事情:
TreeViewItem chr = new TreeViewItem();
chr.GotFocus += new RoutedEventHandler(testing(chr));
我不太明白该怎么做,我做的任何事情都会导致语法错误。这通常是如何完成的/甚至可能吗?
感谢任何帮助。
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
}
您应该使用 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());
}
}
该方法将在 "NewValue" 属性 的 e 参数中接收 TreeViewItem,因此 MessageBox 将显示项目标签。
使用 sender
参数,如下所示:
private void testing(object o, EventArgs e)
{
var treeViewItem = o as TreeViewItem;
}
碰巧发件人对象实际上是触发事件的对象,对于您的情况是 TreeViewItem