В WP7 TextBox.Focus () не работает, когда на странице присутствует элемент управления WebBrowser. - PullRequest
5 голосов
/ 10 мая 2011

Мне нужно установить фокус на текстовое поле. Проблема заключается в том, что когда на странице присутствует элемент управления 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();
}

Я пробовал разные обходные пути, но не повезло. А именно, я попытался вызвать SetFocus из событий Load, NavigatedTo и т. Д. Я также попытался установить фокус на какой-то другой элемент управления и затем вернуться к текстовому полю, тоже не повезло.

Может ли кто-нибудь обойти эту проблему?

Кстати, проблема воспроизводится на эмуляторе, на устройствах HTC Mozart и Trophy, на которых установлено обновление NoDo.

Ответы [ 5 ]

2 голосов
/ 04 марта 2013

шаг 1: связать загруженное событие с соответствующим текстовым полем, в котором вы хотите установить фокус

1 голос
/ 12 июля 2011

Попробуйте дважды использовать вызов txt.Focus ().Я нашел это в поисках решения о том, как установить фокус на ListBox.В итоге я дважды пытался вызвать функцию Control.Focus (), чтобы установить фокус (запуск 3 событий GotFocus), и это, похоже, сработало.

0 голосов
/ 22 июня 2012

Поскольку мы предоставили взлом для случая до-манго версий WP7, я заранее не проверял сценарий. Хорошие новости, ребята!

В WP7 Mango проблема не существует!

0 голосов
/ 18 июня 2012

Попробуйте обработать что-нибудь в событии GotFocus. Может быть txt.SelectionStart = txt.Text.Length; Это работает для меня.

0 голосов
/ 12 мая 2011

Это грязный обходной путь, но вы могли бы сделать это. При запуске должен отсутствовать компонент WebBrowser на странице. Затем подключите элемент управления TextBox к событию LostFocus. Примерно так:

txt.LostFocus += new RoutedEventHandler(txt_LostFocus);

Когда он теряет фокус, вы можете безопасно добавить элемент управления WebBrowser на страницу:

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

Это не позволит вам перефокусироваться программно позже, поскольку WebBrowser будет препятствовать этому, но это способ сделать это при запуске.

...