1

XAMLおよびWinRTで、タップするまでテキスト入力が無効になるようにテキストボックスを設定する方法はありますか。

Tappedイベントを設定してから、IsEnabled = trueを設定しようとしましたが、そもそもIsEnabled=trueの場合にのみ機能するようです。

これはMSDNで見つかりました: http ://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/708c0949-8b06-40ec-85fd-201139ca8b2d

TappedEventを各TextBoxで処理されるイベントに手動で追加することについて説明します。これは面倒ですが、IsEnabledがすでにtrueに設定されていない限り機能しないようです。

基本的に、すべてのテキストボックスにデータが表示されるが、ユーザーがタップしてボックスを有効にしてから入力しない限り無効になるフォームが必要です。

4

1 に答える 1

2

IsReadOnlyの代わりに使用IsEnabledして、探しているものを達成できます。さらに、タップされたイベント ハンドラーをコードで簡単に設定できます。上記のように、コードでハンドラーを設定することがこれが機能するための要件であるかどうかはわかりません。ただし、物事は単純化されます。

詳細はこちら。

ページ クラス (ここではMainPage) のコンストラクターで、setup 関数を呼び出します。

public MainPage()
{
    this.InitializeComponent();
    // call the setup for the textboxes
    SetupTextBoxes();
}

ここでマジックを行います - このページのすべてのテキストボックスを読み取り専用にし、タップ ハンドラーを設定します。

private void SetupTextBoxes()
{
    var tbs = GetVisualChildren<TextBox>(this, true);
    foreach (var tb in tbs)
    {
        tb.IsReadOnly = true;
        tb.AddHandler(TappedEvent, new TappedEventHandler(tb_Tapped), true);
    }
}

T渡された親の指定されたタイプ ( ) のすべての子のリストを取得するユーティリティ関数。

private List<T> GetVisualChildren<T>(DependencyObject parent, bool recurse = true)
where T : DependencyObject
{
    var children = new List<T>();
    int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
    for (int i = 0; i < numVisuals; i++)
    {
        DependencyObject v = (DependencyObject)VisualTreeHelper.GetChild(parent, i);
        var child = v as T;
        if (child == null && recurse)
        {
            var myChildren = GetVisualChildren<T>(v, recurse);
            children.AddRange(myChildren);
        }
        if (child != null)
            children.Add(child);
    }
    return children;
}

最後に、イベント ハンドラーです。これにより、タップ時に各テキストボックスが有効になります。

private void tb_Tapped(object sender, TappedRoutedEventArgs e)
{
    ((TextBox)(sender)).IsReadOnly = false;
}
于 2013-03-19T21:33:05.950 に答える