'inputscope'에 해당되는 글 1건

  1. 2012.02.03 [wp7] PasswordBox 에 대한 고찰…(PasswordBox에서 Inputscope)
Windows Phone 72012. 2. 3. 17:21

기본 PasswordBox 컨트롤…

일단 TextBox의 기능을 많이 제거 하였으며

무엇보다. Sealed로 되어 있어서 상속을 못한다!!!

그래서 상속받아서 나만의 컨트롤을 만들수가 없고

더 중요한건!!!

InputScope를 지원안한다는거… 어휴..

나는 Number 만 쓰는 PasswordBox를 만들고 싶었지만

윈폰에서 제공 되지 않아서 이리저리 찾아보았지만 단한개의 Numberic PasswordBox가 없었다.!!!

이럴수가?

할수없이 컨트롤을 만들었다 하지만 사용하기는 쉽지 않을것 같다.

빨리 만들려고 UserControl로 만들었다.

public partial class NumbericPasswordCtl : UserControl
   {
       StringBuilder _fakeString;

       public NumbericPasswordCtl()
       {
           InitializeComponent();
           _fakeString = new StringBuilder();
           xRealTB.Opacity = 0;
           xRealTB.KeyUp += new System.Windows.Input.KeyEventHandler(xRealTB_KeyUp);
       }

       private void xRealTB_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
       {
           if (e.Key == System.Windows.Input.Key.Unknown)
               return;

           if (e.Key == System.Windows.Input.Key.Back)
           {
               if (_fakeString.Length <= 0)
                   return;

               _fakeString.Remove(_fakeString.Length - 1, 1);
           }
           else
           {
               _fakeString.Append("*");
           }
           xFakeTB.Text = _fakeString.ToString();
       }
   }
 
    <Grid x:Name="LayoutRoot">
        <TextBlock IsHitTestVisible="False" x:Name="xFakeTB" Foreground="White" FontSize="56" />
        <TextBox InputScope="Number" x:Name="xRealTB"/>
    </Grid>

원리는 InputScope가 지원되는 TextBox위에 TextBlock를 덮어 씌우고 IsHitTestVisible을 false로 하였다.

그래서 TextBox에 숫자를 입력하지만 사용자가 보이는것은 TextBlock에 * 을 보게 될것이다.

이건 패스워드box에 워터마크를 추가하는것에 흰트를 얻었는데

Toolkit에서 지원하는 TextBox에는 Hint를 제공해주지만 PasswordBox는 지원해주지 않는다.

PasswordBox 워터마크도 비슷한 방법으로 사용할수 있다.

참고 : http://damianblog.com/2011/01/21/wp7-password-watermark/

Posted by 동동(이재동)