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 等在各种互联网站点上漂浮,但没有一个对我来说可靠。最后我确定了以下几点:

私人布尔_firstTime =真;

    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 回答