【发布时间】:2022-01-04 17:03:20
【问题描述】:
我在 Prism 中使用 WPF MVVM 模式 我正在尝试将键绑定绑定到某个命令
----查看---
<Canvas Background="Red" Grid.Row="1">
<i:Interaction.Triggers>
<i:EventTrigger EventName="PreviewKeyDown">
<prism:InvokeCommandAction Command="{Binding KeyDownCmd}"/>
</i:EventTrigger>
<i:EventTrigger EventName="KeyDown">
<prism:InvokeCommandAction Command="{Binding KeyUpCmd}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Canvas>
----查看模型----
#region Commands
public DelegateCommand<KeyEventArgs> KeyDownCmd { get; private set; }
public DelegateCommand<KeyEventArgs> KeyUpCmd { get; private set; }
#endregion
#region Ctor
public GameViewModel()
{
KeyDownCmd = new DelegateCommand<KeyEventArgs>(KeyDownExecute);
KeyUpCmd = new DelegateCommand<KeyEventArgs>(KeyUpExecute);
}
private void KeyUpExecute(KeyEventArgs obj)
{
//some code here
}
private void KeyDownExecute(KeyEventArgs obj)
{
//some code here
}
我也尝试像 KeyDown="Canvas_KeyDown" 这样绑定到代码隐藏,但什么也没有
尝试使用 PreviewKeyDown /PreviewKeyUp 却什么也没有
还尝试将键盘命令绑定到画布上方的网格和 userControl,但什么也没有
附言 我使用 viewInjection as described here 在页面之间导航
【问题讨论】:
-
您是否尝试过将 i:Interaction.Triggers 内容放在窗口上?我怀疑画布是否有理由接收击键...
-
是的,事件和代码都在后面
-
活动窗口应该总是看到 previewkeydown 事件,如果你有多个窗口,你必须观察所有的事件