如何将焦点放在DataForm中的TextBox?

时间:2010-01-02 19:40:28

标签: silverlight silverlight-3.0 focus silverlight-toolkit dataform

我有一个小的DataForm,我想把焦点放在第一个TextBox上。我正在使用Novermber 2009 Toolkit。我已经命名了TextBox并尝试使用DataForm加载的事件中的.Focus()。我看到它会聚焦一个光标'闪烁',然后就消失了。我试图弄清楚,如果这是DataForm或其他东西的人工制品。有谁知道我是否应该这样做?

3 个答案:

答案 0 :(得分:1)

我成功使用的一个小技巧是订阅文本框的Loaded事件,然后在事件处理程序中,我使用以下代码设置焦点:

private void TextBox_Loaded(object sender, RoutedEventArgs e)
{
            TextBox usernameBox = (TextBox)sender;
            Dispatcher.BeginInvoke(() => { usernameBox.Focus(); });
}

答案 1 :(得分:1)

我尝试过很多建议,例如使用Dispatcher,UpdateLayout等等在各种互联网网站上漂浮,并且没有一个可靠地为我工作。最后我决定了以下几点:

private 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()方法似乎存在时间问题。

答案 2 :(得分: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; 
    } 
} 

那应该适合你。

Jim McCurdy

YinYangMoney