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_Textbox_Focus - Fatal编程技术网

如何在Silverlight中提供文本框焦点?

如何在Silverlight中提供文本框焦点?,silverlight,textbox,focus,Silverlight,Textbox,Focus,在我的Silverlight应用程序中,我似乎无法将焦点转移到文本框控件。根据各种帖子的推荐,我将IsTabStop属性设置为True,并使用TextBox.Focus()。虽然UserControl_加载的事件正在触发,但TextBox控件没有获得焦点。我在下面包含了我非常简单的代码。我错过了什么?谢谢 Page.xaml <UserControl x:Class="TextboxFocusTest.Page" xmlns="http://schemas.microsoft.co

在我的Silverlight应用程序中,我似乎无法将焦点转移到文本框控件。根据各种帖子的推荐,我将IsTabStop属性设置为True,并使用TextBox.Focus()。虽然UserControl_加载的事件正在触发,但TextBox控件没有获得焦点。我在下面包含了我非常简单的代码。我错过了什么?谢谢

Page.xaml

<UserControl x:Class="TextboxFocusTest.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Loaded="UserControl_Loaded" 
    Width="400" Height="300">

    <Grid x:Name="LayoutRoot" Background="White">        
        <StackPanel Width="150" VerticalAlignment="Center">            
            <TextBox x:Name="RegularTextBox" IsTabStop="True" />    
        </StackPanel>        
    </Grid>
</UserControl>

设置焦点的代码是正确的,因为如果添加一个调用相同代码的按钮,它将完美工作:

<StackPanel Width="150" VerticalAlignment="Center">
    <TextBox x:Name="RegularTextBox" IsTabStop="True" />
    <Button Click="UserControl_Loaded">
        <TextBlock Text="Test"/>
    </Button>
</StackPanel>

对我来说似乎是一个错误……

你确定你没有真正得到关注吗?在Beta 2中有一个已知的bug,你可以获得焦点并能够键入,但是你不能获得插入符号或边框。解决方法是在调用Focus()之前在文本框上调用UpdateLayout()。

我忘记了一件事……我还没有找到一种方法来可靠地将焦点强制到页面上的Silverlight应用程序上(它可以在某些浏览器上工作,而不能在其他浏览器上工作)


因此,Silverlight应用程序本身可能没有焦点。在我开始期待键盘输入以确保silverlight应用程序具有焦点之前,我通常会诱使用户单击按钮或类似的东西

我会尝试在UserLoaded事件上添加一个Dispatcher,该事件在整个控件加载几毫秒后执行Focus方法;可能问题就在那里。

我在silverlight.net上找到了这个,在调用RegularTextBox.Focus()之前,通过添加对System.Windows.Browser.HtmlPage.Plugin.Focus()的调用,我能够让它为我工作:


对于浏览器外应用程序,
System.Windows.browser.HtmlPage.Plugin.Focus()不存在


其他想法请参见。

谢谢圣地亚哥·帕拉迪诺调度员为我做了完美的工作。我正在做的是:

这是Focus(); 然后 Dispatcher.BeginInvoke(()=>{tbNewText.Focus();})

不适合我

召唤

 Dispatcher.BeginInvoke(() => { tbNewText.Focus();});
从Load事件开始工作。

我还需要调用

Deployment.Current.Dispatcher.BeginInvoke(()=>myTextbox.Focus())

有趣的是,当我在TextBlock上单击鼠标,折叠TextBlock并使TextBox可见时,这个调用发生在事件处理程序中。如果我没有调度程序跟踪它。BeginInvoke它将无法获得焦点


-Mike

我在SL4、IE7和Firefox 3.6.12中都能使用它

最后一个使焦点工作(对我来说)的缺失“片段”是setting.TabIndex属性

        System.Windows.Browser.HtmlPage.Plugin.Focus();
        txtUserName.IsTabStop = true;
        txtPassword.IsTabStop = true;

        if (txtUserName.Text.Trim().Length != 0)
        {
            txtPassword.UpdateLayout();
            txtPassword.Focus();
            txtPassword.TabIndex = 0;
        }
        else
        {
            txtUserName.UpdateLayout();
            txtUserName.Focus();
            txtUserName.TabIndex = 0;
        }

我也遇到了这个问题,但它是由一个不同的案例引起的,而不是这里已经回答过的问题

如果在查看过程中显示和隐藏了
BusyIndicator
控件,则如果有如下行,控件将无法获得焦点:

Dispatcher.BeginInvoke(() => { myControl.Focus();}); 
在加载事件中

相反,您需要在BusyIndicator显示设置为false后调用该行代码


我有一个相关的问题,以及这个场景的解决方案。

确实是一个令人讨厌的怪人。我找到了一个简单明了的解决方案:

(VB代码)

这里的每个元素都是必不可少的,至少根据我的项目(VB2010 SL4浏览器)


归功于:

我解决了加入控制构造函数的问题:

this.TargetTextBox.Loaded += (o, e) => { this.TargetTextBox.Focus(); };
this.Loaded += new RoutedEventHandler(MainPage_Loaded);

我的个人资料不够好,无法评论@Jim B-G,但对我来说,有效的方法是在RichTextBox上为加载的事件添加一个处理程序,并在该处理程序中添加

System.Windows.Browser.HtmlPage.Plugin.Focus();
<YourTextBox>.UpdateLayout()
<YourTextBox>.Focus();

System.Windows.Browser.HtmlPage.Plugin.Focus();
.UpdateLayout()
.Focus();

然而,它只适用于IE和FF。要让它在Chrome和Safari上运行,请滚动到

的底部。上面的答案都没有直接对我起作用,我所做的是在MainPage()构造函数中添加了此事件:

this.TargetTextBox.Loaded += (o, e) => { this.TargetTextBox.Focus(); };
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
并按以下方式处理:

   void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        System.Windows.Browser.HtmlPage.Plugin.Focus();
        RegularTextBox.Focus();
    }

我的Silverlight版本是4。

问得好,但我肯定。用户控件加载后,焦点不在文本框上。奇怪,谢谢布莱恩特。我喜欢您使用按钮单击进行验证的方式。我看看能不能想出类似于你的MouseMove建议的东西。谢谢你的建议。我连接了调度员,结果是一样的。直到我实际采取行动(例如,点击页面)时,焦点才被设定。这就成功了。它不提供文本框有焦点的指示器(文本框内的克拉或边框突出显示),但我很高兴。谢谢。“System.Windows.Browser.HtmlPage.Plugin.Focus()”它做什么?顾名思义System.Windows.Browser.HtmlPage.Plugin.Focus()将在浏览器窗口中聚焦silverlight插件。这在IE和FF中有效,但在Chrome中无效。我将其简化为HtmlPage.Plugin.Focus();someTextBox.UpdateLayout();someTextBox.Focus();这取决于浏览器!这听起来很明显,但在尝试聚焦之前,请检查您的文本框是否已禁用<代码>焦点()
仅在启用的控件上工作。
System.Windows.Browser.HtmlPage.Plugin.Focus();
<YourTextBox>.UpdateLayout()
<YourTextBox>.Focus();
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
   void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        System.Windows.Browser.HtmlPage.Plugin.Focus();
        RegularTextBox.Focus();
    }