Почему бы не создать прикрепленное свойство, чтобы скрыть это поведение? Что-то вроде этого:
public class TextBoxHelper
{
public static bool GetRestrictToNumerical(DependencyObject obj)
{
return (bool)obj.GetValue(RestrictToNumericalProperty);
}
public static void SetRestrictToNumerical(DependencyObject obj, bool value)
{
obj.SetValue(RestrictToNumericalProperty, value);
}
public static readonly DependencyProperty RestrictToNumericalProperty =
DependencyProperty.RegisterAttached("RestrictToNumerical", typeof(bool), typeof(TextBoxHelper), new PropertyMetadata(false, onRestrictToNumericalChanged));
private static void onRestrictToNumericalChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var tb = d as TextBox;
if (tb == null)
return;
if ((bool)e.NewValue)
tb.KeyDown += tb_KeyDown;
else
tb.KeyDown -= tb_KeyDown;
}
static void tb_KeyDown(object sender, Windows.UI.Xaml.Input.KeyRoutedEventArgs e)
{
e.Handled = e.Key < VirtualKey.Number0 || e.Key > VirtualKey.Number9;
}
}
Вы бы использовать его в XAML как это:
<Page
x:Class="App4.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App4"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<TextBox VerticalAlignment="Center" local:TextBoxHelper.RestrictToNumerical="True" InputScope="Number" />
</Grid>
</Page>
This, на мой взгляд, это чистый MVVM подход для всех входных валидаций, что вы могли бы должны быть сделаны. Вероятно, это слишком сложно для вашего простого вопроса, но он подходит для более сложных проверок.