0

UIElementユーザー コントロール内で 2 つの のタブ インデックスを設定しようとしています。ユーザー コントロールには、テキスト ボックスとボタンが含まれています。現在、添付プロパティを介してテキストボックスにフォーカスが適用されていますが、タブキーを押してテキストブロックからボタンに移動したり、キーの押下 (Enter キー) を検出してボタンのコマンドをトリガーしたりしたいと考えています。 (私は別の質問を知っています)

主な焦点は、最初にタブ インデックスを作成することです。

ポインタや提案をありがとう。

アップデート

それ以来、タブ順序を処理するために添付プロパティを使用しようとしました

        public static DependencyProperty TabIndexProperty = DependencyProperty.RegisterAttached("TabIndex", typeof(int), typeof(AttachedProperties), null);
    public static void SetTabIndex(UIElement element, int value)
    {
        Control c = element as Control;
        if (c != null)
        {

            RoutedEventHandler loadedEventHandler = null;
            loadedEventHandler = new RoutedEventHandler(delegate
                {
                    HtmlPage.Plugin.Focus();
                    c.Loaded -= loadedEventHandler;
                    c.Focus();
                });
            c.Loaded += loadedEventHandler;
        }
    } 

ただし、これをコンパイルしようとすると、ボタン コントロールの TabIndex プロパティが存在しないというエラーが表示されます。これが失敗する理由はありますか?

4

2 に答える 2

2

これはビュー固有の問題であり、そのため、MVVM でも ViewLevel で処理する必要があります。MVVM は、コード ビハインドからすべてのコードを削除することを規定していません。これは単に、そこにコードを配置するときにビュー固有の懸念が必要であることを意味します。これはそれらのケースの 1 つです。

于 2011-05-10T21:00:01.060 に答える
0

遅い時間です...添付プロパティを使用してこれを解決しました。上記のソリューションでは、作成した以前の DP をコピーし、テストする前にコードを変更していませんでした。

以下は実用的なソリューションです

添付プロパティ クラスを作成し、次のコードを追加しました。

       #region Search Field Focus

    public static DependencyProperty InitialFocusProperty = DependencyProperty.RegisterAttached("InitialFocus", typeof(bool), typeof(AttachedProperties), null);

    public static void SetInitialFocus(UIElement element, bool value)
    {
        Control c = element as Control;
        if (c != null && value)
        {
            RoutedEventHandler loadedEventHandler = null;
            //set focus on control
            loadedEventHandler = new RoutedEventHandler(delegate
                {
                HtmlPage.Plugin.Focus();
                c.Loaded -= loadedEventHandler;
                c.Focus();
            });
            c.Loaded += loadedEventHandler;
        }
    }

    public static bool GetInitialFocus(UIElement element)
    {
        return false;
    }
    #endregion

    #region Tabbing Order of Elements

    public static DependencyProperty TabIndexProperty = DependencyProperty.RegisterAttached("TabIndex", typeof(int), typeof(AttachedProperties), null);
    public static void SetTabIndex(UIElement element, int value)
    {
        element.SetValue(TabIndexProperty, value);
    }

    public static int GetTabIndex(UIElement element)
    {
        return (int)element.GetValue(TabIndexProperty);
    }
    #endregion

最初の DP はテキスト ブロックのフォーカスを設定するため、ユーザー コントロールが読み込まれると、カーソルがテキスト フィールド内に配置されます。

DP 2 は、タブ順序を設定します。フォーカスは既に現在のコントロールに適用されているため、タブは正常に配置されます。コントロールにフォーカスしていない場合は、最初にこれを設定する必要があります。

最後に、xaml 内で xmlns でクラスを宣言し、コントロールに追加します。

于 2011-05-10T21:10:44.093 に答える