在WP7中,当页面上存在WebBrowser控件时,TextBox.Focus()不起作用

时间:2011-05-10 08:53:34

标签: windows-phone-7 textbox focus browser

我需要将注意力放在文本框上。问题是当页面上存在WebBrowser控件时,SIP显示为选择了文本框,但光标在文本框中不可见,输入不会转到文本框。

如果我将WebBrowser控件注释掉,那么行为就像预期的那样 - 当页面加载时,光标在TextBox中闪烁。

这是XAML:

<phone:PhoneApplicationPage 
x:Class="WP7Sample.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
Loaded="MainPageLoaded">

<StackPanel x:Name="LayoutRoot">
    <TextBox x:Name="txt"/>
    <phone:WebBrowser/>
</StackPanel>

</phone:PhoneApplicationPage>

代码隐藏:

void MainPageLoaded(object sender, RoutedEventArgs e)
{
    txt.Focus();
}

我尝试了不同的解决方法,但没有运气。 也就是说,我试图从Load,NavigatedTo等事件中调用SetFocus。我也尝试将焦点设置为其他控件,然后返回文本框,也没有运气。

有人可以为此问题提供解决方法吗?

顺便说一下,这个问题在仿真器上,HTC Mozart和Trophy设备上都已经安装了NoDo更新。

5 个答案:

答案 0 :(得分:2)

步骤1:将加载的事件与您想要设置焦点的相应文本框绑定

<StackPanel x:Name="ContentPanel" Margin="2,0,2,0">
  <TextBox x:Name="SearchTextBox" Height="90" VerticalAlignment="Top" 
           Loaded="SearchTextBox_Loaded"
           KeyDown="SearchTextBox_KeyDown"/>
</StackPanel>

步骤2:现在将此事件发生时设置为焦点

private void SearchTextBox_Loaded(object sender, RoutedEventArgs e)  
{  
    (sender as TextBox).Focus();  
}

答案 1 :(得分:1)

尝试两次使用txt.Focus()调用。我找到了这个寻找如何在ListBox上设置焦点的解决方案。我最终试图调用Control.Focus()函数两次来设置焦点(触发3个GotFocus事件),它似乎工作。

答案 2 :(得分:0)

这是一个肮脏的解决方法,但你可以这样做。启动时,页面中不存在WebBrowser组件。然后,将TextBox控件连接到LostFocus事件。像这样:

txt.LostFocus += new RoutedEventHandler(txt_LostFocus);

当它失去焦点时,您可以安全地向页面添加WebBrowser控件:

void txt_LostFocus(object sender, RoutedEventArgs e)
{
    LayoutRoot.Children.Add(new WebBrowser());
}

这不会让您稍后重新编程,因为WebBrowser会禁止它,但它是一种在启动时执行此操作的方法。

答案 3 :(得分:0)

尝试处理GotFocus事件中的某些内容。也许txt.SelectionStart = txt.Text.Length;它对我有用。

答案 4 :(得分:0)

由于我们为芒果前版本的WP7提供了一个hack,我没有事先检查过这个场景。 好消息,伙计们!

在WP7 Mango中,问题不存在!