WPF 페이지로로드에서 초점을 설정하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/177911

  •  05-07-2019
  •  | 
  •  

문제

몇 페이지가있는 WPF 브라우저와 같은 응용 프로그램이 있습니다. 페이지간에 전환하면 키보드 초점을 설정하고 싶습니다.

페이지가 처음로드되면 전화를 통해 작동합니다. Control.Focus() 생성자에서.

그러나 페이지 사이를 전환 할 때 더 이상 작동하지 않습니다. 초점은 첫 번째 필드에만 있으며 다른 것으로 변경하려는 시도를 무시합니다.

페이지에는 속성이 있습니다 KeepAlive=true - 초점을 유지하면 괜찮을 것입니다. 그러나 첫 번째 필드에 초점을 맞추는 것만으로도 성가시다.

로드 된 이벤트에서 초점을 맞추려고 노력했지만 작동하지 않았습니다. 페이지를 다시로드 한 후 기본 초점이 설정된 것 같습니다.

두 번째로 페이지를 입력하는 데 집중할 수있는 방법이 있습니까? 브라우저 유사 애플리케이션에서 WPF 페이지간에 전환 할 때 초점을 설정해야 할 때?

도움이 되었습니까?

해결책 4

이 문제에 대한 해결책이 없기 때문에 간단한 해결 방법을 사용했습니다.

2 차 스레드를 발사하여 페이지가로드 된 후 초점이 변경됩니다.

운 좋게도 이것은 beginvoke를 사용하여 매우 쉽게 이루어집니다.

myControl.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Background, 
(System.Threading.SendOrPostCallback)delegate(object state) 
{ 
  myControl.Focus(); 
});

이것은 내가 예상했던 것보다 더 잘 작동 했으므로 아마도이 해결 방법은 오랫동안 계속 사용할 것입니다.

다른 팁

Try Adding FocusManager.FocusedElement="{Binding ElementName=[...]}"`` to the first Element in your Page and set [...] to the name of the element which should get the focus.

생성자가 아닌로드 된 이벤트 핸들러에서 초점을 설정해 보셨습니까? 페이지를 다시 탐색 할 때 페이지가 재구성되지 않지만 올바르게 기억하면 다시로드됩니다.

'WPF 초점 포커스 악몽'을 가지고 있고 스택에 대한 답변을 기반으로 한 후 다음은 내가 최상의 솔루션임을 입증했습니다.

먼저, app.xaml onstartup () 다음을 추가하십시오.

EventManager.RegisterClassHandler(typeof(Window), Window.LoadedEvent,
          new RoutedEventHandler(WindowLoaded));

그런 다음 app.xaml에서 'Windowloaded'이벤트를 추가하십시오.

void WindowLoaded(object sender, RoutedEventArgs e)
    {
        var window = e.Source as Window;
        System.Threading.Thread.Sleep(100);
        window.Dispatcher.Invoke(
        new Action(() =>
        {
            window.MoveFocus(new TraversalRequest(FocusNavigationDirection.First));

        }));
    }

스레딩 문제는 일부 프레임 워크 레이스 조건으로 인해 WPF 초기 초점이 대부분 실패하기 때문에 사용해야합니다.

전체 앱에 전 세계적으로 사용되는 다음 솔루션을 가장 잘 찾았습니다.

도움이되기를 바랍니다 ...

오란

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top