WPF OnPreviewTextInput是怎么表示捕获到的按键的?

问题描述

classEditSomeRichText:Window{protectedoverridevoidOnPreviewTextInput(System.Windows.Input.TextCompositionEventArgse){if(e.ControlText.Length>0){if(e.ControlText[0]=='x0F'){OpenFileDialogdialog=newOpenFileDialog();//...}elseif(e.ControlText[0]=='x13'){SaveFileDialogdialog=newSaveFileDialog();//...}}base.OnPreviewTextInput(e);}}

当窗口上按下Ctrl+o,会打开打开文件的窗口;按下Ctrl+s,打开保存文件的窗口。但是我奇怪'x0F'和'x13'是什么意思?为什么会匹配到ctrl和o、s?

解决方案

本帖最后由 gqqnb 于 2011-12-10 23:29:04 编辑
解决方案二:
usingSystem;usingSystem.Windows;usingSystem.Windows.Input;usingSystem.Windows.Documents;usingMicrosoft.Win32;usingSystem.Windows.Controls;usingSystem.Windows.Media;usingSystem.IO;namespacesk.FileTest{publicclassFileTest:Window{RichTextBoxtxtbox;stringstrFilter="DocumentFiles(*.txt)|*.txt|AllFiles(*.*)|*.*";[STAThread]publicstaticvoidMain(){Applicationapp=newApplication();app.Run(newFileTest());}FileTest(){Title="FileTest";txtbox=newRichTextBox();txtbox.VerticalScrollBarVisibility=ScrollBarVisibility.Auto;Content=txtbox;txtbox.Focus();}protectedoverridevoidOnPreviewTextInput(TextCompositionEventArgse){if(e.ControlText.Length>0&&e.ControlText[0]=='/x0F'){OpenFileDialogdlg=newOpenFileDialog();dlg.CheckFileExists=true;dlg.Filter=strFilter;if((bool)dlg.ShowDialog(this)){FlowDocumentflow=txtbox.Document;TextRangerange=newTextRange(flow.ContentStart,flow.ContentEnd);Streamstrm=null;try{strm=newFileStream(dlg.FileName,FileMode.Open);range.Load(strm,DataFormats.Text);}catch(Exceptionexc){MessageBox.Show(exc.Message,Title);}finally{if(strm!=null)strm.Close();}}e.Handled=true;}if(e.ControlText.Length>0&&e.ControlText[0]=='/x13'){SaveFileDialogdlg=newSaveFileDialog();dlg.Filter=strFilter;if((bool)dlg.ShowDialog(this)){FlowDocumentflow=txtbox.Document;TextRangerange=newTextRange(flow.ContentStart,flow.ContentEnd);Streamstrm=null;try{strm=newFileStream(dlg.FileName,FileMode.Create);range.Save(strm,DataFormats.Text);}catch(Exceptionexc){MessageBox.Show(exc.Message,Title);}finally{if(strm!=null)strm.Close();}}e.Handled=true;}base.OnPreviewTextInput(e);}}}
解决方案三:
引用1楼hefeng_aspnet的回复:

usingSystem;usingSystem.Windows;usingSystem.Windows.Input;usingSystem.Windows.Documents;usingMicrosoft.Win32;usingSystem.Windows.Controls;usingSystem.Window……

错了,《WPF编程指南》里命名空间的名称就是EditSomeRichText

时间: 2024-12-27 15:41:15

WPF OnPreviewTextInput是怎么表示捕获到的按键的?的相关文章

Dev gridcontrol 捕获按键事件

作者:jiankunking 出处:http://blog.csdn.net/jiankunking 控件自带方法位置: 代码: private void ViewHtlb_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Control | e.KeyCode == Keys.Q) { MessageBox.Show("Ctrl + Q"); } if (e.KeyCode == Keys.Shift | e

WPF Multi-Touch 开发:Windows 7 安装多点触屏模拟器

本系列将介绍Multi-Touch(MT)多点触控技术的相关内容,使开发人员了解如何在Windows 平台中开发出具有MT 功能的应用程序.众所周知Windows 7 操作系统自身已经支持具有MT 功能的硬件设备, 画板程序(Paint)就是一个很好的例子,如果你的显示设备具有MT 功能,便可以用两个手指同时在画板中绘制不同的图案. 作为开发者对MT 应用程序进行测试的时候,当然需要MT 硬件设备的支持,否则我们无法判断程序是否能够正常运行.虽然现在市面上的MT 设备已经很多,但价格也都不菲.如

基于对话框程序中让对话框捕获WM_KEYDOWN消息的实现方法_C 语言

在对话框程序中,我们经常是利用对话框上的子控件进行命令响应来处理一些事件.如果我们想要让对话框(子控件的父窗口)类来响应我们的按键消息,我们可以通过ClassWizard对WM_KEYDOWN消息进行响应,当程序运行后,我们按下键盘上的按键,但对话框不会有任何的反应.这是因为在对话框程序中,某些特定的消息,例如按键消息,它们被Windows内部的对话框过程处理了(即在基类中完成了处理,有兴趣的读者可以查看MFC的源代码),或者被发送给子控件进行处理,所以我们在对话框类中就捕获不到按键的消息了.

一起谈.NET技术,WPF Multi-Touch 开发:Windows 7 安装多点触屏模拟器

本系列将介绍Multi-Touch(MT)多点触控技术的相关内容,使开发人员了解如何在Windows 平台中开发出具有MT 功能的应用程序.众所周知Windows 7 操作系统自身已经支持具有MT 功能的硬件设备, 画板程序(Paint)就是一个很好的例子,如果你的显示设备具有MT 功能,便可以用两个手指同时在画板中绘制不同的图案.              作为开发者对MT 应用程序进行测试的时候,当然需要MT 硬件设备的支持,否则我们无法判断程序是否能够正常运行.虽然现在市面上的MT 设备已

Flash MX 2004 编程(AS2.0)教程(十二)

编程|教程 2.4影片剪辑事件 相对于前面所介绍的鼠标事件.键盘事件以及帧事件而言,影片剪辑事件则显得稍为有点难懂.当我们将一个影片剪辑放到场景中时,他就成了一个"事件发射器",不断地报告自己的运行状态,如果我们捕获这样的事件,就可以做出相应的反应和处理.影片剪辑有多种,下面分门别类地加以介绍. 2.4.1onClipEvent(Load)和onClipEvent(unload) 这个事件在影片剪辑加载的时候发生,那什么是影片剪辑的加载呢?比方说,你在场景中添加了一个影片剪辑clip_

Flash MX 2004 ActionScript图文教程(十二)

教程 2.4影片剪辑事件 相对于前面所介绍的鼠标事件.键盘事件以及帧事件而言,影片剪辑事件则显得稍为有点难懂.当我们将一个影片剪辑放到场景中时,他就成了一个"事件发射器",不断地报告自己的运行状态,如果我们捕获这样的事件,就可以做出相应的反应和处理.影片剪辑有多种,下面分门别类地加以介绍. 2.4.1onClipEvent(Load)和onClipEvent(unload) 这个事件在影片剪辑加载的时候发生,那什么是影片剪辑的加载呢?比方说,你在场景中添加了一个影片剪辑clip_mc,

Android按键添加和处理的三个解决

 实现方案需求:Android机器上有个Wifi物理按键,现在需求通过点击"wifi物理按键"能够快速的开启/关闭wifi. 经过思考之后,拟出下面几种方案: 方案一,在linux kernel的驱动中捕获"wifi物理按键".在kernel的按键驱动中截获"wifi"按键,并对其进行处理:若是"wifi"是开启的,则关闭wifi:否则,打开wifi. 方案二,在Android中添加一个服务,监听wifi按键消息.若监听到&q

XP系统中如何屏蔽Ctrl+Esc键序列

  对于用过Windows的人,几乎没有人不知道Ctrl+Alt+Del组合键,尤其是在使用经常死机的Windows9x时,使用它的频率更高,这一组合键是专门为了系统安全起见提供的紧急出口.VC知识库在线杂志第11期,ac952_z_cn在他的个人专栏中写过一篇关于这方面的文章:"WINDOWS NT/2000下如何屏蔽CTRL+ALT+DEL".因此本文侧重于介绍在Windows XP中如何实现屏蔽CTRL+ALT+DEL组合键,也就是任务管理器,任务切换组合键(Alt+Tab),任

针对Android的Pegasus恶意软件版本和针对iOS的有什么不同?

Pegasus恶意软件原本是针对iOS设备的威胁,如今其扩大了范围,具备了感染Android设备的能力.针对Android的恶意软件变体可通过捕获屏幕截图.按键和音频以及从消息中窃取数据来窥探用户设备.那么针对Android的Pegasus版本与针对iOS版本有何不同? Michael Cobb:2016年,移动安全厂商Lookout Inc.与多伦多大学公民实验室合作,开启了围绕在iOS设备上运行的Pegasus恶意软件而进行的具有针对性和持续性的移动攻击的研究.Pegasus恶意软件由一个名