Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 如何将焦点赋予数据表单中的文本框?_Silverlight_Silverlight 3.0_Focus_Silverlight Toolkit_Dataform - Fatal编程技术网

Silverlight 如何将焦点赋予数据表单中的文本框?

Silverlight 如何将焦点赋予数据表单中的文本框?,silverlight,silverlight-3.0,focus,silverlight-toolkit,dataform,Silverlight,Silverlight 3.0,Focus,Silverlight Toolkit,Dataform,我有一个小数据表,我想把焦点放在第一个文本框上。我正在使用2009年11月的工具包。我已经命名了文本框,并尝试使用数据表单加载事件中的.Focus()。我看到它在一次光标“闪烁”时获得焦点,然后它就消失了。我试图弄清楚这是数据表单的人工制品还是其他东西。有人知道我是否可以这样做吗?尝试调用我的自定义焦点设置功能(FocusEx) 内部静态类ControlExt { //控制扩展 内部静态bool FocusEx(此控件) { if(control==null) 返回false; 布尔成功=假

我有一个小数据表,我想把焦点放在第一个文本框上。我正在使用2009年11月的工具包。我已经命名了文本框,并尝试使用数据表单加载事件中的.Focus()。我看到它在一次光标“闪烁”时获得焦点,然后它就消失了。我试图弄清楚这是数据表单的人工制品还是其他东西。有人知道我是否可以这样做吗?

尝试调用我的自定义焦点设置功能(FocusEx)

内部静态类ControlExt
{ 
//控制扩展
内部静态bool FocusEx(此控件)
{ 
if(control==null)
返回false;
布尔成功=假;
if(control==FocusManager.GetFocusedElement())
成功=真实;
其他的
{ 
//要使Focus()正常工作,请在紧接着之前调用UpdateLayout()
control.UpdateLayout();
success=control.Focus();
} 
ListBox ListBox=控件作为ListBox;
如果(列表框!=null)
{ 
if(listBox.SelectedIndex<0&&listBox.Items.Count>0)
listBox.SelectedIndex=0;
} 
回归成功;
} 
} 
那应该对你有用

吉姆·麦考迪


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

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

我尝试了大量的建议,例如使用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()方法似乎存在时间问题。

谢谢您的建议。我试过了,但没用:我得到了同样的结果。文本框短暂聚焦,然后失去焦点。如果我注释掉.Focus()语句,或者使用您的代码注释掉.FocusEx()语句,那么它根本就得不到焦点,所以我知道他们正在着手解决这个问题。一定是别的什么东西偷了它,但我不知道怎么弄清楚它是什么。你有没有找到解决这个问题的办法?我也有同样的问题。在codeplex项目的页面上创建了一个问题:这对我有用。关键是在GotFocus事件的正确文本框上设置焦点。
    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;
            }
        }
    }