나는 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>
'InputScope '은 터치 입력 키보드 유형에 사용됩니다. – BrunoLM