之前在一个项目中,Window窗口嵌入UserControl页面,在UserControl控件页面中添加PreviewKeyDown或者KeyDown事件,软件均不触发事件;在Window窗口可以响应事件,但是由于项目上下文绑定,调用不到想要执行的函数,所以写个文章记录一下,以便后期遇到同样问题,能及时解决。

1、UserControl后台逻辑处理页面中添加

public void CallKeyDown(KeyEventArgs e)
{if (e.Key == Key.Space){if (DataContext != null){if (((MainViewModel)DataContext).MagnetronVM != null)if (((MainViewModel)DataContext).MagnetronVM.IsEnabled_Position == true)((MainViewModel)DataContext).MagnetronVM.StopCtrl();                }}
}

2、在Window的xaml 窗口设置中添加PreviewKeyDown事件

<Window x:Class="RealStomach_WPF.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:RealStomach_WPF"Height="950" Width="1800"PreviewKeyDown="Window_PreviewKeyDown"><Viewbox HorizontalAlignment="Center" VerticalAlignment="Center" Stretch="Fill"><StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="5,0,5,0"><local:RealMainView x:Name="realView" Background="#FF0E121B"/></StackPanel></Viewbox>
</Window>

3、Window 后台逻辑处理,响应PreviewKeyDown事件:

private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{this.realView.CallKeyDown(e);
}

扩展:

在Panel(StackPanel、Canvas、Grid)上或者是在一些默认不支持Focus的控件上添加了KeyDown或者KeyUp,处理方法在鼠标左键点击事件中,让控件获取到焦点,并且设置该控件Focusable="True";

具体代码示例:

<!--前端UI-->
<StackPanel x:Name="stanpan" Focusable="True"/>
//后台左键响应事件
private void MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{Grid1.Focus();
}

WPF UserControl响应PreviewKeyDown事件方法相关推荐

  1. cocos2d ccLayer响应触摸事件方法:CCStandardTouchDelegate 与 CCTargetedTouchDelegate

    cocos2d ccLayer响应触摸事件方法:CCStandardTouchDelegate 与 CCTargetedTouchDelegate    以下内容转载自:http://blog.sin ...

  2. ListView不能响应itemclick事件的解决方法

    原文:http://blog.csdn.net/xanxus46/article/details/8348931 大家都知道listview可以根据自己的需求,重写baseadapter ,实现自己的 ...

  3. Android 响应用户事件的方法

    同绘图一样, View 也是通过回调函数来响应用户事件的.键盘事件的回调函数有多个,以对应不同的事件,我们暂时只用到 onKeyDown ,对应按键被按下的事件,其他函数以后用到再介绍.让我们重载 o ...

  4. C#中WPF响应键盘事件

    WPF中的键盘事件用法如下: 在需要监听键盘事件的界面XAML中注册键盘按下的事件KeyDown="LoginWindow_KeyDown". <Window x:Class ...

  5. LibVLCSharp在WPF中无法响应鼠标事件

    问题原因 官方LibVLCSharp库的VideoView在WPF中其实还是使用的Win32控件 WPF控件会被Win32控件遮挡,所以无法响应鼠标事件. 解决办法 在VideoView控件上添加一层 ...

  6. WPF 学习笔记 路由事件

    1. 可传递的消息: WPF的UI是由布局组建和控件构成的树形结构,当这棵树上的某个节点激发出某个事件时,程序员可以选择以传统的直接事件模式让响应者来响应之,也可以让这个事件在UI组件树沿着一定的方向 ...

  7. WPF listviewItem 鼠标双击事件

    WPF listviewItem 鼠标双击事件 一.Listview 控件的命名 <ListView x:Name="SListView"   ItemContainerSt ...

  8. c语言windows程序设计 - 第十天,C语言Windows程序设计 - 第十天 - 响应键盘事件...

    响应键盘事件 ------------------------ 在开始学习有关键盘事件的知识前首先来看一段代码(回调函数这部分的代码): 1 LRESULT CALLBACK WndProc( HWN ...

  9. [转]Listview的onItemClickListener无法响应的解决方法

    在Android软件设计与实现中我们通常都会使用到ListView这个控件,系统有一些预置的Adapter可以使用,例如SimpleAdapter和ArrayAdapter,但是总是会有一些情况我们需 ...

最新文章

  1. STM8S单片机修改工程编译器配置
  2. boost::multiprecision模块gmp相关的测试程序
  3. java 蓝桥杯算法训练 猴子分苹果(题解)
  4. scanner python_Python之Scanner编写
  5. 最小高度100%页脚保持在底部的布局方法
  6. 从小到大排列组合 php,求一个一维数组中,n个元素的不同组合,并返回该数组
  7. 利用抓包工具分析数据帧具体内容
  8. w ndows10专业版连接不上网,Windows10连不上无线网怎么办 Windows10修复网络教程
  9. Windows下Redis-Cluster伪集群搭建
  10. FusionChartsFree的用法
  11. selenium 网址
  12. Linux系统的安装
  13. 论文翻译—Ciphertext-Policy Attribute-Based Encryption
  14. 使用U盘为台式机安装centos7
  15. 150行Python代码模拟太阳系行星运转
  16. Wifi P2p技术研究
  17. 2021-08-09-ROS学习-消息创建,发布者和订阅者实现及测试
  18. 近期FTDI的FT232RL杀疯了,给大家介绍一款国产替代P TO P的高性能GR232RL
  19. 卡在返回驾驶舱–孤岛危机
  20. IDEA Maven工程出现org.codehaus.plexus.component.repository.exception.ComponentLookupException错误

热门文章

  1. flutter取消动态字体大小
  2. 微信小程序3-模板与配置
  3. access查找出生日期年份_access查询最大年龄减最小年龄
  4. html的table 菜鸟,HTML table 标签 | 菜鸟教程
  5. android重新启动_如何重新启动Android智能手机或平板电脑
  6. python mpi4py multiprocessing_python基于multiprocessing的多进程创建方法
  7. 缓存加速-----Squid-访问控制列表日志分析反向代理
  8. 高考倒计时100天....99天
  9. Linux 串口终端kermit安装和使用
  10. android 流畅动画svg,android svg动画