我已经创建了一个解决方案来重现我在MVVM-Light EventToCommand和InputBindings中遇到的问题。问题围绕一个窗口打开另一个窗口,如果我连接了一个InputBinding,说出转义键并关闭第二个视图,它会关闭第二个视图并返回第一个视图。如果我使用EventToCommand然后手动调用相同的命令它关闭第二个视图,它也会关闭第一个视图。
我希望在没有代码的情况下有点难以看到,所以我创建了一个测试解决方案来重现问题。
步骤如下:
按预期工作
1)点击第一个窗口的按钮打开第二个窗口。
2)按第二个上的退出键以使用输入绑定
问题案例
1)点击第一个窗口的按钮打开第二个窗口。
2)单击“Hello”文本框 3)按Esc键以使用EventToCommand路径并关闭两个窗口?
答案 0 :(得分:1)
您必须通知WPF事件处理机制,在您的事件处理程序中处理按钮按下并且不应该在事件链中冒泡。如果你没有,你的文本框在活动窗口(window2)上调用close,并且转义处理程序在活动窗口上调用close(window1,因为window2已经被文本框的转义处理程序关闭)。因此,如果您修改Close2函数,如下所示一切正常:
public void Close2(KeyEventArgs e)
{
if (e.Key == Key.Escape)
Close();
e.Handled = true;
}
答案 1 :(得分:0)
我认为问题是因为您在EventToCommand侦听器中挂接了 PreviewKeyDown 事件。我认为它是在KeyUp和KeyPress事件触发之前对键关闭和关闭窗口作出反应。这意味着KeyUp和KeyPress将在主窗口上触发,主窗口通过关闭来响应。
我在您的示例中将EventName更改为 PreviewKeyPress ,这似乎解决了这个问题。我能够按Escape并让它关闭顶部窗口。