2013-08-08 2 views
8

Windows Store 앱에는 텍스트 상자가 있으며이 응용 프로그램이 시작되면이 텍스트 상자는 항상 포커스를받습니다. 데스크탑 시나리오에서는 아무런 문제가 없지만 태블릿 기기에서는이 초점을 통해 원하는 시나리오가 아닌 화면상의 키보드를 직접 열 수 있습니다.첫 번째 텍스트 상자에서 포커스 제거

.Focus (FocusState) 메서드를 사용하여 프로그래밍 방식의 다른 컨트롤에 포커스를 설정하려고했지만 포커스가 텍스트 상자로 다시 설정되었습니다. 우리는 LoadState 또는 OnNavigatedTo 메서드에서 포커스를 설정했습니다.

우리는 타이머가있을 때만 다른 컨트롤에 포커스를 성공적으로 설정했습니다. 누구나 포커스를 다른 컨트롤에 설정하는 방법에 대한 아이디어가 있거나 컨트롤에 포커스를 설정하지 않는 것이 좋습니다.

답변

16

일반적으로 모든 요소에 초점을 TextBox.Focus()까지 설정할 수 있습니다. 그러나 ScrollViewer 또는 FlyOut 내부에 TextBox를 배치 할 때 동일한 동작 (시작시 자동 초점)을 발견했습니다. 그럼 당신은 부모 요소에 IsTabStop을 설정해야합니다 :

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

그것은 정확한 답되지 않습니다. 텍스트 상자 앞에 IsTabStop = true를 사용하여 scrollview를 추가하고 가로 및 세로 스크롤 막대의 가시성을 축소하여 설정했습니다. 그것은 가장 멋진 해결책은 아니지만, 그것이 무엇을 일으키는 지 알기까지는 효과가 있습니다! 감사! – ChristiaanV

+0

IsTabStop은 Control 속성입니다. 그래서 모든 컨트롤에서 설정할 수 있습니다. 어쩌면 당신은 현재의 부모 요소 (그것이 무엇이든간에)를 당신에게 설정하려고 시도했을 것입니다. –

+0

LayoutAwarePage 내부의 그리드입니다. 그리드에는 IsTabStop이 없습니다. LayoutAwarePage하지만, 그것을 해결하지 않습니다. – ChristiaanV

0

IsTabStop이 = "true"를 나를 위해 작동하지 않았다. 내 솔루션은 TextBox에 포커스를 설정하기 전에 scrollViewer의 UpdateLayout()을 호출하는 것입니다.

scrollViewer.UpdateLayout();

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

0

당신이 ScrollViewer에 답 받아 마음에 들지 않으면 당신은 또한 초점 제거하려면이 작업을 수행 할 수 있습니다 내 텍스트 상자가있는 ScrollViewer 또는 플라이 아웃에 있지 않았기 때문에,

_textBox.IsReadOnly = true; 
_textBox.IsReadOnly = false; 
관련 문제