动态创建元素的事件处理程序

时间:2014-04-25 13:25:58

标签: c# windows-phone-8 event-handling windows-phone windows-phone-7.1

我正在使用Windows Phone 7.1(7.5)应用。 想法:app从服务器获取数据列表,为每个数据创建一个TextBlock,并为每个数据应用Tap事件处理程序。 问题:因为我只能为所有元素使用一个处理程序,如何识别发件人?

创建新TextBlock的部分:(注意:itemsAdded是一个外部变量,即设置适当的边距)

void addInfoItem(string text)
    {
        Thickness tempThick = fatherText.Margin;
        tempThick.Top += itemsAdded * 58;
        itemsAdded++;
        TextBlock temp = new TextBlock() { Text = text, FontSize = 40, HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Top, Margin = tempThick };
        temp.Tap += whenTapped;
        ContentPanel.Children.Add(temp);
    }

whanTapped事件处理程序:

private void whenTapped(object sender, RoutedEventArgs e)
    {
        //how to identify the sender?
    }

调试时,“对象发送者”提供了足够的信息来识别发送者 - TextBlock的“Text”属性,但在编码过程中,我从“对象发送者”获得的是以下内容:Equals,GetHashCode,GetType,ToString。 (ToString只告诉它通常是一个TextBlock,就是全部)。

1 个答案:

答案 0 :(得分:2)

  

但在编码过程中,我从“对象发送者”获得的是以下内容:
    Equals,GetHashCode,GetType,ToString。

因为Object仅支持这些方法,而且它是所有(几乎)的父类。 和父类可以包含/保持子类memebrs,但除非将它们转换为子类型,否则不能访问子成员。

所以你使用了can sender对象,但是你需要将它强制转换为你的控件TextBlock以获得所需的成员调用。

TextBlock temp = (TextBlock) sender;
temp.Invi=okeSomething(); //now you can invoke `TextBlock` memebrs