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

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

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

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

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

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 >
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 >

 

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

你可能感兴趣的:(text)