我正在將 WPF MVVM 模式與 Prism 一起使用,我試圖將鍵系結系結到某個命令
- - 看法 - -
<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,但什么也沒有
PS 即時使用viewInjection在頁面之間導航,如此處所述
uj5u.com熱心網友回復:
ACanvas不會引發任何擊鍵事件,除非它是Focusable聚焦的。
您可以通過在 XAML 中設定屬性來使其具有焦點,但您仍然必須在某個點將其聚焦,例如在單擊它時:
private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Canvas canvas = (Canvas)sender;
Keyboard.Focus(canvas);
}
XAML:
<Canvas Focusable="True" Background="Red"
PreviewKeyDown="Canvas_PreviewKeyDown"
MouseLeftButtonDown="Canvas_MouseLeftButtonDown">
...
</Canvas>
您可能應該重新考慮您的方法并處理PreviewKeyDown父元素或可聚焦子元素的Canvas替代方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/408092.html
標籤:
