1

Silverlight フォームのコントロールに初期フォーカスを設定しようとしています。XAML ファイルでフォーカスを指定できるように、添付プロパティを使用しようとしています。コントロールがフォーカスを受け入れる準備が整う前に、フォーカスが設定されていると思われます。誰でもこれを確認したり、この手法をどのように機能させるかを提案したりできますか?

TextBox の XAML コードは次のとおりです。

<TextBox x:Name="SearchCriteria" MinWidth="200" Margin ="2,2,6,2" local:AttachedProperties.InitialFocus="True"></TextBox>

プロパティは AttachedProperties.cs で定義されています。

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)
        c.Focus();
}

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

SetInitialFocus メソッドにブレークポイントを設定すると、ブレークポイントが起動し、コントロールは目的の TextBox になり、Focus が呼び出されます。

このタスクを達成するために他の人が動作などを作成したことは知っていますが、なぜこれが機能しないのか疑問に思っています。

4

1 に答える 1

1

そうです、Control はまだ読み込みを完了していないため、フォーカスを受け取る準備ができていません。これを追加して機能させることができます。

public static void SetInitialFocus(UIElement element, bool value)
{
    Control c = element as Control;
    if (c != null && value)
    {
        RoutedEventHandler loadedEventHandler = null;
        loadedEventHandler = new RoutedEventHandler(delegate
        {
            // This could also be added in the Loaded event of the MainPage
            HtmlPage.Plugin.Focus();
            c.Loaded -= loadedEventHandler;
            c.Focus();
        });
        c.Loaded += loadedEventHandler;
    }
}

(場合によっては、このリンクに従って ApplyTemplate も呼び出す必要がある場合があります)

于 2010-12-17T16:57:07.430 に答える