Tôi không quen thuộc với NumericTextBox
, nhưng đây là triển khai C#/XAML đơn giản chỉ cho phép các chữ số và ký tự thập phân.
Tất cả điều đó là ghi đè sự kiện OnKeyDown
; dựa trên khóa đang được nhấn, nó cho phép hoặc không cho phép sự kiện này đạt được lớp cơ sở TextBox
.
Tôi nên lưu ý rằng triển khai này là dành cho các ứng dụng Windows Store - Tôi tin rằng câu hỏi của bạn là về loại ứng dụng đó, nhưng tôi không chắc chắn 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;
}
}
}
Đây là một số mẫu XAML. Lưu ý rằng nó giả định MyNumericTextBox
nằm trong vùng tên dự án.
<StackPanel Background="Black">
<!-- custom numeric textbox -->
<local:MyNumericTextBox />
<!-- normal textbox -->
<TextBox />
</StackPanel>
Nguồn
2013-10-15 02:07:13
'InputScope' được sử dụng cho loại bàn phím nhập cảm ứng. – BrunoLM