Windows phone 8.1 textbox character virtualKey validación

Estoy desarrollando Windows Phone 8.1 aplicación. En un cuadro de texto, quiero evitar que el usuario ingrese cualquier letra no digital solamente [0-9].

Entonces aquí está mi código:

 private void NumKeyDown(object sender, KeyRoutedEventArgs e)
        {

           bool isNumber = (e.Key == Windows.System.VirtualKey.Number0 ||
                 e.Key == VirtualKey.Number1 ||
                 e.Key == VirtualKey.Number2 ||
                 e.Key == VirtualKey.Number3 ||
                 e.Key == VirtualKey.Number4 ||
                 e.Key == VirtualKey.Number5 ||
                 e.Key == VirtualKey.Number6 ||
                 e.Key == VirtualKey.Number7 ||
                 e.Key == VirtualKey.Number8 ||
                 e.Key == VirtualKey.Number9 ||
                 e.Key == VirtualKey.Back);

            CoreVirtualKeyStates shiftState = Window.Current.CoreWindow.GetKeyState(VirtualKey.Shift);


            bool shiftIsNotDown = true;
            if ((shiftState & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down)
                shiftIsNotDown = false;

            e.Handled = !(isNumber && shiftIsNotDown);

        }

funciona pero hay dos fallas principales:

1- también acepta los caracteres desplazados (es decir! @ # $% ^ & *) Mientras no se desee.

2- cuando inicio la aplicación, el cuadro de texto se llena con un número. Puedo ingresar cualquier número o caracteres (! @ # $% ^), También puedo eliminarlos usandoBACKSPACE. durante este tiempo elShiftState esNONE. Sin embargo, una vez que elimine todo el contenido en el cuadro de texto usando elBACKSPACE elShiftState cambios a [locked | Down ] y no puedo ingresar nada en ese cuadro de texto.

¡Tenga en cuenta que nunca toco el botón de cambio!

¿Dónde me equivoco aquí?

ACTUALIZAR

Descubrí que el uso de la función deslizar introducirá letras de texto sin activar el evento keyDown que estaba aplicando :(

cualquier ayuda es apreciada

Respuestas a la pregunta(2)

Su respuesta a la pregunta