如何将事件处理程序绑定到集合内动态创建的控件?

How to bind an Event Handler to a dynamically created control inside of a collection?

我再次使用 C#,并尝试了解一些较新的方面,因为上次使用它时 LINQ 还不存在。我正在尝试在 Windows Store 应用程序中创建日历(不是日期选择器),并动态创建大部分控件。当日期为 clicked/tapped 时,我希望它在 RichTextBlock 中显示信息。那部分不是问题...我有一个 Grid 控件,并且可以通过在名为 calBlocks 的列表中创建 RichTextBlocks 来循环访问月份以创建日历。这是让我适合的部分:

    for (int i = 0; i < DateTime.DaysInMonth(CurrentDate.Year, CurrentDate.Month); i++)
    {
        calBlocks.Add(new RichTextBlock());
        calBlocks[i].Tapped += new TappedEventHandler(calBlock_Clicked);
    }

我已经定义了一个 calBlock_Clicked 处理程序,但它似乎从未达到。我好像漏掉了什么,我觉得是很基础的东西,但是我就是看不出来。

如果您有兴趣,这是 calBlock_Clicked 处理程序。它非常基础,目前仅用于调试目的:

    void calBlock_Clicked(object sender, TappedRoutedEventArgs e)
    {

        Paragraph MainHeader = new Paragraph();
        Run HeaderDate = new Run();

        HeaderDate.Text = "This would be a long format date";

        MainHeader.Inlines.Add(HeaderDate);

        TestBlock.Blocks.Add(MainHeader);
    }

我看过了,但我没有看到任何能准确回答这个问题的东西...有一些类似的帖子,但没有一个能完全回答我的问题。如果已经有,请指点我!

在构建时将 RichTextBlockIsTextSelectionEnabled 属性 设置为 false

这将重新启用 Tapped 事件。

示例:

calBlocks.Add(new RichTextBlock() { IsTextSelectionEnabled = false });