2011-05-10 7 views
0

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

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

ありがとうございました。

これは私がコンパイルしようとしたとき、私はタブ順序

 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; 
     } 
    } 

を処理するために、添付プロパティを採用しようとしましたので、UPDATE

は、しかし、私は、TabIndexプロパティが存在しないエラーが発生しますボタンコントロール用。なぜこれが失敗しているのか?

答えて

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で宣言し、コントロールに追加します。

2

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

+0

Scottと私は、コードがビュー固有のものであれば、ビューコードの背後で扱うことができるという点で他の人たちと同じ意見を聞いています。 – rlcrews

+0

なぜ、これは、テキストボックス/ボタンのTabIndexプロパティではなく、添付プロパティで行うのですか? –

+0

ユーザーコントロールがどのように初期化されているか(ビューに読み込まれたとき)から、TabIndexプロパティがxaml内で設定されるのを "防止"します。関連付けられたプロパティを使用することは、この異常(MVVMプロジェクトのリース)を中心に見つけた解決策でした。 – rlcrews