WPF/SL中如何在TextBox屏蔽中屏蔽输入法

     今天碰到一个郁闷的问题,由于在输入法状态下,TextBox的KeyDown事件中捕获到的Key都是ImeProcessed,而MSDN中所说的能够根据e.ImeProcessedKey来取到真实的按下的键也完全是瞎说,从这里取到的也是ImeProcessed。郁闷之中,突然灵机一动,想到在系统自带的PasswordBox中是无法使用输入法的,于是使用Reflector查看了它的源代码,发现他在静态构造函数中做了如下设置:

ExpandedBlockStart.gif 代码
InputMethod.IsInputMethodEnabledProperty.OverrideMetadata( typeof (PasswordBox),  new  FrameworkPropertyMetadata(BooleanBoxes.FalseBox, FrameworkPropertyMetadataOptions.Inherits,  null new  CoerceValueCallback(PasswordBox.ForceToFalse))); 

简单来说就是可以通过设置InputMethod的一个名为IsInputMethodEnabled的附加属性来实现屏蔽输入法。

在WPF和SL中的使用方法分别如下:

ExpandedBlockStart.gif WPF
< Window  x:Class ="WpfModelViewApplication1.Views.MainView"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:input
="clr-namespace:System.Windows.Input;assembly=PresentationCore"
    Title
="Main Window"  Height ="400"  Width ="800" >
    
< DockPanel >
        
< Grid  x:Name ="grid1" >
            
< TextBox  x:Name ="tb"  Width ="100"  HorizontalAlignment ="Right"  Margin ="0,164,122,128"  input:InputMethod.IsInputMethodEnabled ="False" />
        
</ Grid >
    
</ DockPanel >
</ Window >
ExpandedBlockStart.gif Sl
< UserControl  x:Class ="SilverlightApplication1.MainPage"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:input
="clr-namespace:System.Windows.Input;assembly=System.Windows" >
  
< StackPanel  x:Name ="LayoutRoot" >
        
< TextBox  x:Name ="tb1"  Width ="100"  Height ="100"  input:InputMethod.IsInputMethodEnabled ="False" />
    
</ StackPanel >
</ UserControl >

 

一个很实用但是可能很少人知道的小功能,希望能够帮助到大家。

转载于:https://www.cnblogs.com/yingql/archive/2010/03/31/1701777.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值