我不熟悉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