委托方法

来源:互联网 发布:淘宝怎么给朋友发链接 编辑:程序博客网 时间:2024/05/16 11:01

1. 利用 delegate

   public delegate void ImageSelectedEvent(ImageArgs e);

  public class ImageArgs : EventArgs
    {
        public string Id { get; set; }
        public FishEyePanel.FishEyeData FishEyeData { get; set; }
    }

 

    public class FishEyePanel : Panel
    {

        //public event RoutedEventHandler ImageClick;
        public event ImageSelectedEvent ImageSelected;

 

    void image_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            Image im = sender as Image;
            selectImageName = im.Name;

            var selitem = from data in Datas
                          where data.Id == im.Name
                          select data;

            List<FishEyeData> listitems = new List<FishEyeData>();
            foreach (FishEyeData fishEyeData in selitem)
            {
                listitems.Add(fishEyeData);
            }
            if (listitems.Count > 0)
            {
                SelectedItem = (FishEyeData)listitems[0];
            }
            //如果没有权限则退出。
            if (SelectedItem.IsEnable == false) return;

            foreach (PopTip stackPanel in this.Children)
            {
                Image imgtemp = stackPanel.img as Image;
                if (imgtemp != null)
                {
                    if (imgtemp.Name == im.Name)
                    {
                        stackPanel.IsSelecting();
                    }
                    else
                    {
                        stackPanel.IsUnSelecting();
                    }
                }
            }

            ImageArgs imageArgs = new ImageArgs() { Id = im.Name, FishEyeData = SelectedItem };
            if (ImageSelected != null )
            {
                ImageSelected(imageArgs);
            }
        }

 

}

 

 

 

2.利用 Action

 例如:

Public Class A

{

 

 //声明:

public  Action<T> Recieved;

 

// 引发:

public void OnRecived(T  t)
        {
            if (Recieved != null)
                Dispatcher.BeginInvoke(Recieved, T);
        }

}

 

在另一个地方引用:

public class B

{

 pub void Call(A   a)

{

    if(a==null)  return ;

   a.Recieved=(0)=>

  {

   ///

  ///

 } ;

}

}

原创粉丝点击