【问题标题】:key strokes events dont execute in C# WPF击键事件不会在 C# WPF 中执行
【发布时间】: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 事件,如果你有多个窗口,你必须观察所有的事件

标签: c# wpf mvvm key prism


【解决方案1】:

Canvas 不会引发任何击键事件,除非它是 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>

您可能应该重新考虑您的方法并改为处理父元素的PreviewKeyDownCanvas 的可聚焦子元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 2018-06-29
    • 2021-06-02
    • 1970-01-01
    相关资源
    最近更新 更多