2013-08-08 3 views
8

В нашем приложении Windows Store у нас есть текстовое поле, и когда приложение запускает это текстовое поле, всегда получайте фокус. В настольном сценарии это не проблема, но на планшетном устройстве этот фокус будет напрямую открывать экранную клавиатуру, которая не является тем сценарием, который нам нужен.Удалить фокус на первом текстовом поле

Мы попытались установить фокус на другую программную программу управления с помощью метода .Focus (FocusState), но каким-то образом фокус снова установлен в текстовое поле. Мы установили фокус в LoadState или OnNavigatedTo.

Только когда у нас есть таймер, мы успешно настроили фокус на другой элемент управления. У кого-нибудь есть идеи, как настроить фокус на другой элемент управления или, лучше всего, настроить фокус на управление?

ответ

16

Обычно вы можете установить Фокус на любой элемент на TextBox.Focus(). Однако я обнаружил одно и то же поведение (автофокус при запуске), когда вы размещаете свой TextBox внутри ScrollViewer или FlyOut. Затем вы должны установить IsTabStop на родительском-элемента:

<ScrollViewer IsTabStop="true"> 
    <TextBox /> 
</ScrollViewer> 
+2

Это не точный ответ, потому что мое текстовое поле не было внутри ScrollViewer или выпадающей. Хотя я исправил это, добавив scrollview с IsTabStop = true перед текстовым полем и установив горизонтальную и вертикальную видимость прокрутки. Это определенно не самое замечательное решение, но пока я не узнал, что вызывает его, он работает! Благодаря! – ChristiaanV

+0

IsTabStop - свойство Control. Поэтому вы можете установить его на любом элементе управления. Возможно, вы просто попытаетесь установить его на текущий родительский элемент (что бы это ни было). –

+0

Это сетка внутри LayoutAwarePage. В сетке нет IsTabStop. LayoutAwarePage имеет, но это не исправляет. – ChristiaanV

0

IsTabStop = «истина» не работает для меня. Мое решение - вызвать UpdateLayout() scrollViewer перед установкой фокуса на TextBox:

scrollViewer.UpdateLayout();

textBox.Focus (Windows.UI.Xaml.FocusState.Programmatic);

0

Если вы не любите принят ответ с ScrollViewer вы также можете сделать это, чтобы удалить фокус:

_textBox.IsReadOnly = true; 
_textBox.IsReadOnly = false; 
Смежные вопросы