2012-11-05 2 views
8

나는 Windows 8 타일 응용 프로그램에서 Numericbox에 대한 좋은 대안을 찾으려고합니다. 나는 윈도우 폼에 존재하는 동일한 숫자 박스를 사용하려고 시도했으나 이것들이 윈도우 8 어플리케이션에 의해 지원되지 않는다고 말하는 에러가 발생했다. 타일 ​​응용 프로그램의 TextBox 요소에 "Number"로 설정할 수있는 InputScope가 있지만 사용자가 원하는 문자를 입력 할 수 있습니다. InputScope은 내가 생각하는대로하지 않는다고 가정합니다.Windows 8 응용 프로그램에서 Numericbox를 대체 할 수 있습니까?

현재 텍스트 상자를 관리하고 있습니다.하지만 계산을하기 때문에 인터페이스를 업데이트 할 때 텍스트를 계속 소수점 이하로 변환 한 다음 텍스트로 다시 변환해야하며 여러 가지 검사를 수행해야합니다. 사용자가 숫자가 아닌 문자를 입력하지 않았는지 확인하십시오. 이것은 극도로 지루하고 Windows Form에 매우 친숙합니다. 잘못된 방향으로 나아가는 단계 인 것 같습니다. 나는 명백한 무엇인가 놓치고 있어야 한단다?

+0

'InputScope '은 터치 입력 키보드 유형에 사용됩니다. – BrunoLM

답변

3

나는 NumericTextBox에 익숙하지 않지만 여기에는 숫자와 소수점 문자 만 허용하는 간단한 C#/XAML 구현이 나와 있습니다.

모든 것은 OnKeyDown 이벤트보다 우선합니다. 누르는 키에 따라 이벤트가 기본 TextBox 클래스에 도달하도록 허용하거나 허용하지 않습니다.

이 구현은 Windows 스토어 앱을위한 것이라는 점에 유의해야합니다. 귀하의 질문은 해당 유형의 앱에 관한 것이지만 100 % 확신 할 수는 없습니다.

public class MyNumericTextBox : TextBox 
{ 
    protected override void OnKeyDown(KeyRoutedEventArgs e) 
    { 
     HandleKey(e); 

     if (!e.Handled) 
      base.OnKeyDown(e); 
    } 

    bool _hasDecimal = false; 
    private void HandleKey(KeyRoutedEventArgs e) 
    { 
     switch (e.Key) 
     { 
      // allow digits 
      // TODO: keypad numeric digits here 
      case Windows.System.VirtualKey.Number0: 
      case Windows.System.VirtualKey.Number1: 
      case Windows.System.VirtualKey.Number2: 
      case Windows.System.VirtualKey.Number3: 
      case Windows.System.VirtualKey.Number4: 
      case Windows.System.VirtualKey.Number5: 
      case Windows.System.VirtualKey.Number6: 
      case Windows.System.VirtualKey.Number7: 
      case Windows.System.VirtualKey.Number8: 
      case Windows.System.VirtualKey.Number9: 
       e.Handled = false; 
       break; 

      // only allow one decimal 
      // TODO: handle deletion of decimal... 
      case (Windows.System.VirtualKey)190: // decimal (next to comma) 
      case Windows.System.VirtualKey.Decimal: // decimal on key pad 
       e.Handled = (_hasDecimal == true); 
       _hasDecimal = true; 
       break; 

      // pass various control keys to base 
      case Windows.System.VirtualKey.Up: 
      case Windows.System.VirtualKey.Down: 
      case Windows.System.VirtualKey.Left: 
      case Windows.System.VirtualKey.Right: 
      case Windows.System.VirtualKey.Delete: 
      case Windows.System.VirtualKey.Back: 
      case Windows.System.VirtualKey.Tab: 
       e.Handled = false; 
       break; 

      default: 
       // default is to not pass key to base 
       e.Handled = true; 
       break; 
     } 
    } 
} 

다음은 일부 샘플 XAML입니다. 프로젝트 네임 스페이스에 MyNumericTextBox이 있다고 가정합니다.

<StackPanel Background="Black"> 
    <!-- custom numeric textbox --> 
    <local:MyNumericTextBox /> 
    <!-- normal textbox --> 
    <TextBox /> 
</StackPanel> 
+0

이 예제는 Shift + 숫자를 처리하지 않으므로 특수 문자를 몰래 사용할 수 있으며 소수점은 한 번만 추가 할 수 있습니다. 지울 경우 다시 추가 할 수 없습니다. – Dave