第一次使用时添加委托函数
本文关键字:函数 添加 第一次 | 更新日期: 2023-09-27 18:13:10
我有一个按钮,它使用storyboard通过调用begin()
滑出一个菜单,像这样
private void ShareBtn_Click(object sender, RoutedEventArgs e)
{
SlideIn.Begin();
}
在然后滑出的网格上有按钮。
每个按钮然后将网格向后滑动当storyboard完成按钮的动作后就像这样运行,
private void PictureBtn_Click(object sender, RoutedEventArgs e)
{
CertificateDisplay.SaveAsPicture();
}
private void FacebookBtn_Click(object sender, RoutedEventArgs e)
{
App.facebookSuccess = false;
NavigationService.Navigate(new Uri("/FBLogin.xaml", UriKind.Relative));
}
private void SMSBtn_Click(object sender, RoutedEventArgs e)
{
SlideOut.Begin();
SlideOut.Completed += delegate(object s, EventArgs se) { SlideOut_Completed(s, se, "Email"); };
}
private void EmailBtn_Click(object sender, RoutedEventArgs e)
{
SlideOut.Begin();
SlideOut.Completed += delegate(object s, EventArgs se) { SlideOut_Completed(s, se, "Email"); };
}
void SlideOut_Completed(object sender, EventArgs e, String shareType)
{
switch (shareType)
{
case "Email":
...
default:
break;
}
}
我遇到的缺陷是我不能从事件堆栈中删除匿名函数。
我已经设法通过使shareType
成为上述所有函数的公共变量,而不是使用匿名委托,然后在调用OnNavigatedFrom
时从事件堆栈中删除"命名"函数来解决它。
是否有一种方法可以通过仍然使用这些委托来做到这一点,因为它看起来更整洁?
一种选择是在处理程序本身中删除它:
EventHandler handler = null;
handler = delegate(object s, EventArgs se) {
SlideOut_Completed(s, se, "Email");
SlideOut.Completed -= handler;
};
SlideOut.Completed += handler;
SlideOut.Begin();
为什么在每次点击时分配完成的事件处理程序EmailBtn_Click ?在表单构造函数或表单加载事件中执行。