我已经创建了一个解决方案来重现我在MVVM vs InputBindings中遇到的一个问题。问题围绕着打开另一个窗口,如果我有一个InputBinding连接到转义键并关闭第二个视图,它将关闭第二个视图并返回到第一个视图。如果我使用EventToCommand,然后手动调用它关闭第二个视图的同一个命令,它也会关闭第一个视图。
如果没有代码,我想这有点难理解,所以我已经创建了一个测试解决方案来重现这个问题。
这些步骤如下:
按预期工作
1)单击第一个窗口的按钮,打开第二个窗口。
2)按第二个转义键使用输入绑定
问题案例
1)单击第一个窗口的按钮,打开第二个窗口。
2)点击"Hello“文本框3)按EventToCommand键使用路径,两个窗口都关闭?
发布于 2011-07-10 11:49:40
您必须通知WPF均衡器机制,按钮按下是在您的事件处理程序中处理的,并且它不应该在事件链上冒泡。如果没有,则文本框正在调用活动窗口( window2 )上的close,而转义处理程序在活动窗口上调用close (window1,因为文本框的转义处理程序已经关闭了window2)。因此,如果您按照以下方式修改您的Close2函数,那么一切都很好:
public void Close2(KeyEventArgs e)
{
if (e.Key == Key.Escape)
Close();
e.Handled = true;
}发布于 2011-07-07 03:45:46
我认为问题是因为您将PreviewKeyDown事件挂在EventToCommand侦听器中。我认为这是对在KeyUp和KeyPress事件发生之前关闭窗口的键的反应。这意味着KeyUp和KeyPress将在主窗口上开火,主窗口通过关闭响应。
我在您的示例中将EventName更改为PreviewKeyPress,这似乎解决了问题。我可以按下逃逸,让它只关闭顶部的窗口。
https://stackoverflow.com/questions/6605027
复制相似问题