WPF和动态创建的控件中的事件

时间:2010-04-28 08:55:04

标签: wpf events controls routed

我需要一些帮助才能在某些控件中实现常见行为。

在我的WPF应用程序中,我有一个包含面板和按钮的主窗体:

            好                              
                     

按钮将在单击时运行Save方法.Save方法从表单中读取一些数据并将数据保存到数据库。

该面板填充了动态创建的控件(例如文本框,下拉列表等)。主窗体实例化MainViewModel类。此MainViewModel类实例化一个名为UIFactory的类。所以我们在这里有3个级别。

在UIFactory类中,正在创建控件。主窗体中的Panel作为参数发送到MainModelView类中名为GenerateUI的方法。 MainViewModel类中的此GenerateUI方法在UIFactory类上调用GenerateControls方法,该方法采用与参数相同的面板。然后,UIFactory类中的GenerateControls方法在面板上添加动态创建的控件。

我想要实现的是,当用户在键入其中一个动态创建的控件(例如文本框)时按Enter键时,我希望该行为与单击主窗体中的按钮相同。但是我该怎么做?我想在我的控件上实现Routed事件,但我无法弄清楚如何做到这一点。你能告诉我如何实现我的目标吗?

最诚挚的问候,

OKB

2 个答案:

答案 0 :(得分:0)

也许Keyboard.KeyUp附加事件可能会对您有所帮助。您可以在主面板上设置它,其中包含动态创建的控件,如果按下的键是ENTER键,则执行保存操作。

答案 1 :(得分:0)

我确实设法为我的问题创造了一份工作:

我所做的是创建一个自定义用户控件(让我们称之为容器)。此控件使用WindowsFormsHost而不是面板托管在我的wpf应用程序中。然后,我将动态创建的用户控件添加到我的新自定义用户控件(容器),并在每个子控件的KeyUp事件上添加KeyEventHandler。 我在我的容器中创建了一个自定义事件和事件处理程序,它将从子控件中捕获所有KeyUp事件,检查e.KeyValue == 13(ENTER),然后从将在我的wpf中处理的容器中提取我的自定义事件形成。丑陋如h * ll,但它确实有效。