StyledStringElement'Tapped'事件

时间:2013-05-02 12:51:26

标签: c# ios mono xamarin.ios monodevelop

所以,我试图在用户点击'StyledStringElement'时打开一个电子邮件界面 - 为了做到这一点,我一直在调用tapped事件,但我收到了错误 -

  

“错误CS1502:最佳重载方法匹配   `MonoTouch.Dialog.Section.Add(MonoTouch.Dialog.Element)'有一些   无效的参数(CS1502)“

  

“错误CS1503:要键入的参数#1' cannot convert void'表达式   `MonoTouch.Dialog.Element'(CS1503)“

我使用的代码是 -

        section.Add(new StyledStringElement("Contact Email",item.Email) {
            BackgroundColor=UIColor.FromRGB(71,165,209),
            TextColor=UIColor.White,
            DetailColor=UIColor.White,
        }.Tapped += delegate {
            MFMailComposeViewController email = new MFMailComposeViewController();
            this.NavigationController.PresentViewController(email,true,null);
    });

导致此错误的原因是什么?如何解决?

2 个答案:

答案 0 :(得分:2)

您需要单独初始化“StyledStringElement”

例如:

var style = new StyledStringElement("Contact Email",item.Email) {
            BackgroundColor=UIColor.FromRGB(71,165,209),
            TextColor=UIColor.White,
            DetailColor=UIColor.White,
        };

style.Tapped += delegate {
            MFMailComposeViewController email = new MFMailComposeViewController();
            this.NavigationController.PresentViewController(email,true,null);
    };

section.Add(style);

答案 1 :(得分:0)

new X().SomeEvent += Handler的返回值为void,因此您无法在您的部分中添加该值。

不幸的是,C#正式**不支持在对象初始化器(Assigning events in object initializer)中分配事件,所以你不能这样做:

new X() {
    SomeEvent += Handler,
};

如果你仍然想要同时实例化和附加,那么你最接近的就是

StyleStringElement style;
section.Add(style = new StyledStringElement("Contact Email",item.Email) {
        BackgroundColor=UIColor.FromRGB(71,165,209),
        TextColor=UIColor.White,
        DetailColor=UIColor.White,
    });

style.Tapped += delegate {
        MFMailComposeViewController email = new MFMailComposeViewController();
        this.NavigationController.PresentViewController(email,true,null);
};

**当我正式说,这是因为我记得有些人让它在单声道c#编译器的某些分支中工作。