我需要将注意力放在文本框上。问题是当页面上存在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更新。答案 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中,问题不存在!