8

私はWindows8タイルアプリケーションでNumericboxの良い代替品を見つけようとしています。Windowsフォームに存在するのと同じnumericboxを使用しようとしましたが、これらがWindows 8アプリケーションでサポートされていない(?)というエラーが発生しました。タイルアプリケーションのTextBox要素には「Number」に設定できるInputScopeがあることに気付きましたが、それでもユーザーは好きな文字を入力できます。InputScopeは私が思うことをしないと思います。

私は現在テキストボックスで管理していますが、計算を行っているため、インターフェイスを更新する場合は、テキストを常に10進数に変換してからテキストに戻す必要があります。さらに、ユーザーが行うことを確認するためにいくつかのチェックを実行する必要があります。数字以外の文字は入力しないでください。これは非常に面倒になり、Windowsフォームに精通しているため、これは間違った方向への一歩のようです。明らかな何かが欠けているに違いありませんか?

4

2 に答える 2

3

私は に慣れていません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>
于 2013-10-15T02:07:13.890 に答える
0

WinRT XAML Toolkitの NumericUpDown コントロールが、探しているものかもしれません。

于 2013-10-18T19:02:32.640 に答える