Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 首次使用时添加委托函数_C#_Silverlight_Windows Phone 7 - Fatal编程技术网

C# 首次使用时添加委托函数

C# 首次使用时添加委托函数,c#,silverlight,windows-phone-7,C#,Silverlight,Windows Phone 7,我有一个按钮,它通过调用begin() private void ShareBtn_Click(object sender, RoutedEventArgs e) { SlideIn.Begin(); } 然后滑出的网格上有按钮 然后,每个按钮将网格向后滑动,当故事板完成按钮的操作时,按钮将按如下方式运行 private void PictureBtn_Click(object sender, RoutedEventArgs e) {

我有一个按钮,它通过调用
begin()

    private void ShareBtn_Click(object sender, RoutedEventArgs e)
    {
        SlideIn.Begin();
    }
然后滑出的网格上有按钮

然后,每个按钮将网格向后滑动,当故事板完成按钮的操作时,按钮将按如下方式运行

    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\u Click?在表单构造函数或表单加载事件中执行此操作