2013-03-18 2 views
0

두 개의 텍스트 상자, 아래쪽에 확인란과 두 개의 텍스트 상자가있는 페이지가 있습니다.키보드가 이미 표시되어있을 때 프로그래밍 방식으로 포커스를 텍스트 상자에 설정

확인란을 클릭하면 그 아래의 텍스트 상자에 포커스를 설정하려고합니다. 잘 작동하면 소프트 키보드가 나타나고 화면이 위로 스크롤되어 키보드 위에있는 텍스트 상자가 나타납니다.

그러나 TextBox1 또는 TextBox2에 현재 포커스가 있고 키보드가 이미 표시된 경우 CheckBox_Click 이벤트의 포커스를 설정하면 화면이 재설정되고 다시 아래로 스크롤됩니다. 텍스트 상자 외부에서 초점을 얻었고, 키보드를 보여줍니다 (하지만 화면을 스크롤하지 않습니다 - 텍스트 상자 포커스를 잃을 키보드 + 다시 아래로 화면을 스크롤 숨 깁니다 -

나는 이벤트가 다른 하나와 충돌 같은데요)

어떻게 든 방지 할 수 있습니까? 뒤에 코드

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
    <StackPanel Margin="0,100,0,0"> 
     <TextBox x:Name="TextBox1" /> 
     <TextBox x:Name="TextBox2" /> 
     <CheckBox Content="Click Me" Click="CheckBox_Click" /> 
     <TextBox x:Name="TextBox3" /> 
     <TextBox x:Name="TextBox4" /> 
    </StackPanel> 
</Grid> 

:

여기 간략화 XAML의 버전 코드는

XAML이야

private void CheckBox_Click(object sender, RoutedEventArgs e) 
{ 
    TextBox3.Focus(); 
} 

덕분에

+0

우선주의해야 할 점은 CheckBox_click 이벤트는 checkBox가 이미 선택되었는지 여부를 제어하지 않습니다. 그리고 나는 어떻게 볼 수 없습니까? ** CheckBox_Click 이벤트는 화면을 재설정하고 다시 아래로 스크롤합니다 ** 귀하의 예제에서 스크롤을 볼 수 없습니다. 뭔가 놓친 거 없니? – Olter

답변

0

당신은 문제가 있다는 것입니다 OS가 스크롤 할 수없는 컨트롤에 포커스가있을 때 페이지를 이동하고 이동합니다. SIP에 의해 가려진다.

나는 모든 내용을 ScrollViewer에 넣고 선택한 컨트롤과 SIP가 표시되는지 여부에 따라 VerticalScrollOffset을 조정하여이 문제를 해결했습니다. 이것은 매우 혼란스럽고 끔찍한 코드였습니다. 초점을 이동하는 것의 가치가 간단한 해결책이 없기 때문에 시작하기 전에 노력할만한 가치가 있는지 자문 해보십시오.

+0

감사합니다. Matt. 프레임의 Y 변환 값 (SIP가 표시/숨길 때 변경됨)에 바인딩하고 키보드가 더 이상 표시되지 않으면 플래그를 사용하여 포커스를 설정하여 또 다른 해결 방법을 시도했습니다. 키보드의 펑키 애니메이션이 아래로 슬라이딩하고 다시 백업됩니다. 여기에서 아이디어를 얻었습니다. http://sorokoletov.com/2011/08/windows-phone-70-handling-text-entry-screens/ –

관련 문제