Windows phone 7 在WP7文本框中,当网页上存在WebBrowser控件时,Focus()不起作用

Windows phone 7 在WP7文本框中,当网页上存在WebBrowser控件时,Focus()不起作用,windows-phone-7,textbox,focus,browser,Windows Phone 7,Textbox,Focus,Browser,我需要在文本框上设置焦点。问题是,当网页上存在WebBrowser控件时,SIP将显示为选中了textbox,但在textbox中光标不可见,并且输入不会转到textbox 如果我将WebBrowser控件注释掉,则行为与预期一样-加载页面时,文本框中的光标将闪烁 以下是XAML: <phone:PhoneApplicationPage x:Class="WP7Sample.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/

我需要在文本框上设置焦点。问题是,当网页上存在WebBrowser控件时,SIP将显示为选中了textbox,但在textbox中光标不可见,并且输入不会转到textbox

如果我将WebBrowser控件注释掉,则行为与预期一样-加载页面时,文本框中的光标将闪烁

以下是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>
我尝试过不同的解决方法,但没有成功。 也就是说,我尝试从Load、NavigatedTo等事件调用SetFocus。我还尝试将焦点设置为其他控件,然后返回文本框,也没有成功

有人能为这个问题提供解决办法吗


顺便说一句,这个问题会在模拟器、HTC Mozart和Trophy设备上重现,所有这些设备都安装了NoDo update。

这是一个肮脏的解决办法,但你可以这样做。启动时,页面中没有
WebBrowser
组件。然后,将
TextBox
控件连接到
LostFocus
事件。大概是这样的:

txt.LostFocus += new RoutedEventHandler(txt_LostFocus);
当它失去焦点时,您可以安全地将WebBrowser控件添加到页面:

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

这不允许您以后通过编程重新聚焦,因为
WebBrowser
将禁止它,但这是一种在启动时执行此操作的方法。

尝试使用txt.focus()调用两次。我发现这是一个关于如何设置列表框焦点的解决方案。最后,我尝试调用Control.Focus()函数两次来设置焦点(触发3个GotFocus事件),结果似乎成功了。

尝试处理GotFocus事件中的某些内容。可能
txt.SelectionStart=txt.Text.Length它适合我

由于我们已经为WP7的pre-Mango版本提供了一个案例,所以我事先没有检查场景。 好消息,伙计们


在WP7 Mango中,问题并不存在

步骤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>

恐怕没有答案——在我看来,本机web浏览器控件与Silverlight框架的配合不太好。有趣的是,FocusManager认为文本框具有焦点。即使使用Dispatchermer将焦点设置延迟几秒钟,它仍然不起作用。。。我会向微软提交一份bug报告。是的,看起来,WebBrowser正在窃取焦点。我在apphub foru上找到了类似的帖子:。也没有答案。如果我选择稍后手动添加WebBrowser控件,则在添加之前,texbox具有焦点。一旦添加WebBrowser,文本框就会失去焦点,直到用户单击屏幕上的任何控件,文本框才能接收回焦点。如果我手动添加文本框,也会出现同样的情况——只有用户单击文本框,文本框才会有焦点。我遇到了与此相同的问题,尽管奇怪的是,WebBrowser控件位于与我试图设置焦点的文本框不同的页面上。在导航到/从包含页面时,必须从可视树中添加/删除WebBrowser控件。Dennis,我必须在页面加载时立即查看带焦点的文本框和WebBrowser控件。你的方法无助于我解决问题。一旦网页上出现WebBrowser,TextBox就会失去焦点。您能解释一下在LostFocus事件中添加webbrowser控件的区别吗?TextBox已经失去焦点。只有在WebBrowser控件之前需要TextBox时,此方法才有效。因此,您可以将焦点放在文本框上,当它失去焦点时,您可以添加WebBrowser控件。我明白了,但遗憾的是,在我的场景中,当我必须将焦点放在WebBrowser和文本框上时,它没有帮助。谢谢您的建议。如果您的答案包含与文本内联的代码片段,请在这些代码片段周围加上反勾(`),以便于阅读。
<StackPanel x:Name="ContentPanel" Margin="2,0,2,0">
  <TextBox x:Name="SearchTextBox" Height="90" VerticalAlignment="Top" 
           Loaded="SearchTextBox_Loaded"
           KeyDown="SearchTextBox_KeyDown"/>
</StackPanel>
private void SearchTextBox_Loaded(object sender, RoutedEventArgs e)  
{  
    (sender as TextBox).Focus();  
}