4

小さな DataForm があり、最初の TextBox にフォーカスを設定したいと考えています。2009 年 11 月のツールキットを使用しています。TextBox に名前を付け、DataForm のロード済みイベントから .Focus() を使用してみました。カーソルが「点滅」するだけでフォーカスが移動し、その後消えてしまいます。これがDataFormのアーティファクトなのか、それとも何か他のものなのかを調べようとしています。私がこれを行うことができるかどうか誰かが知っていますか?

4

3 に答える 3

1

私が成功したちょっとしたトリックは、テキスト ボックスの Loaded イベントをサブスクライブすることです。次に、イベント ハンドラーで、次のようなコードでフォーカスを設定します。

private void TextBox_Loaded(object sender, RoutedEventArgs e)
{
            TextBox usernameBox = (TextBox)sender;
            Dispatcher.BeginInvoke(() => { usernameBox.Focus(); });
}
于 2010-12-21T14:22:39.820 に答える
1

Dispatcher、UpdateLayoutなどを使用してさまざまなインターネットサイトに出回っているなど、たくさんの提案を試しましたが、どれも確実に機能しませんでした。最終的に、私は次のことに落ち着きました。

プライベート bool _firstTime = true;

    private void MyChildWindow_GotFocus(object sender, RoutedEventArgs e)
    {
        if (_firstTime)
        {
            try
            {
                var dataForm = MyDataForm;
                var defaultFocus = dataForm.FindNameInContent("Description") as TextBox;
                defaultFocus.Focus();
            }
            catch (Exception)
            {
            }
            finally
            {
                _firstTime = false;
            }
        }
    }

きれいではありません...しかし、うまくいきます。SL4 で Focus() メソッドを使用すると、タイミングの問題があるようです。

于 2011-01-24T13:55:22.770 に答える
0

カスタム フォーカス設定関数 (FocusEx) を呼び出してみてください。

internal static class ControlExt 
{ 
    // Extension for Control 
    internal static bool FocusEx(this Control control) 
    { 
        if (control == null) 
                return false; 

        bool success = false; 
        if (control == FocusManager.GetFocusedElement()) 
                success = true; 
        else 
        { 
                // To get Focus() to work properly, call UpdateLayout() immediately before 
                control.UpdateLayout(); 
                success = control.Focus(); 
        } 

        ListBox listBox = control as ListBox; 
        if (listBox != null) 
        { 
                if (listBox.SelectedIndex < 0 && listBox.Items.Count > 0) 
                        listBox.SelectedIndex = 0; 
        } 

        return success; 
    } 
} 

それはあなたのために働くはずです。

ジム・マッカーディ

陰陽マネー

于 2010-01-12T23:24:58.757 に答える