【发布时间】:2013-03-25 14:06:27
【问题描述】:
我试图在后面的代码中创建一个用户控件,然后响应该控件中的事件。大概是因为该控件在编译时不存在,Visual Studio 无法编译我创建的用于捕获控件事件的处理程序子例程。重要的是,我想在运行时决定控件的类型(这就是我不只是对其进行硬编码的原因)。
[在继续之前,控件正常工作,包括以“正常”方式在 XAML 中创建控件时使用的事件和事件处理程序。我想在后面的代码中创建控件实例,这样我就可以避免复制 99% 相同的页面]
这“有效”(但没有给我所需的灵活性):
Public WithEvents AnswerPanel As MyControls.ScrollerControl
...(以及 New() 子中的初始化):
AnswerPanel = New MyControls.ScrollerControl
ItemStack3.Children.Add(AnswerPanel)
AddHandler AnswerPanel.GuessMade, AddressOf CheckAnswer
...(这是响应 ScrollerControl 中的自定义事件的处理程序子)
Public Sub CheckAnswer(answer As String) Handles AnswerPanel.GuessMade
使用上面的代码,一切都按我的预期工作:控件是在运行时创建的,并且它的事件得到了正确处理。
我想要实现的是在我初始化我的控件(例如 ScrollerControl2、ScrollerControl3 等)时能够选择不同的用户控件。我可以通过更改第一个控件以这种方式创建控件行至:
Public WithEvents AnswerPanel As UserControl
但是一旦进行了更改,我就不能再在我的处理程序中引用自定义事件,因为(可能)编译器将其视为通用 UserControl,它不包括我的自定义 GuessMade 事件。事件名称上的编译器错误并告诉我它不存在。
我确定我在这里做错了什么。我认为这是一个理论/概念问题,而不是我的代码。
我是走在正确的轨道上还是走错了路?
【问题讨论】:
-
你绝对需要包括在这里。您可以从后面的代码订阅事件。您的问题是您的代码无法编译,而无法看到该代码就无法提供帮助。
-
请更新您的问题,以可读的方式包含附加信息。
-
我在这方面取得了一些进展,方法是创建一个继承 UserControl 的“MyControl”类,然后让我的其他控件继承 MyControl。我在 MyControl 中有该事件并在我的其他控件中隐藏,并且一切都可以正常编译...但是在页面的事件处理程序中未检测到该事件(我可以确认正在触发)。有什么想法吗?
标签: vb.net windows-phone-7 xaml user-controls