2017-03-20 2 views
0

탭 당 TextBox가 포함 된 TabControl이 있습니다. 프로그래밍 방식으로 탭을 선택한 다음 TextBox 선택을 설정하고 TextBox에 포커스를 설정해야합니다.WPF는 여러 속성을 하나씩 차례로 변경합니다.

내 문제는 코드에서 새 탭을 선택한 다음 텍스트 상자에 포커스를 설정하면 작동하지 않는다는 것입니다.

원하는 탭이 이미 선택된 탭이고 포커스를 탭 안의 텍스트 상자로 설정하면 작동합니다.

WPF 요소에서 여러 동작을 수행해도 작동하지 않는 것 같습니다.

먼저 tabcontrol의 탭을 전환 한 다음 새로 선택한 TabItem의 자식으로 포커스를 설정하는 올바른 방법은 무엇입니까?


편집 : 완료 렌더 스레드 대기 : 나는 인터넷에서 뭔가를 발견했습니다

https://social.msdn.microsoft.com/Forums/vstudio/en-US/693fbedb-efa6-413e-ab66-530c6961d3fb/how-to-wait-for-the-wpf-render-thread-to-catch-up?forum=wpf

Dispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, new Action(() => { })).Wait(); 

을하지만이 올바른 방법인가?

은 BTW :

Dispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, new Action(() => { })).Wait(); 
Dispatcher.Invoke(DispatcherPriority.ApplicationIdle, new Action(() => { })); 
+0

* "WPF 요소에 여러 가지 작업을 수행하는 작동하지 않습니다"* -이 달려 때 당신이 그것을 할 방법에 대해 설명합니다. 우리를 보여줄 수 있습니까? – Sinatr

+0

나중에 포커스 변경이 디스패처에서 발생하도록 예약해야 할 수도 있습니다. 탭 변경으로 인한 실제 시각적 트리 변경은 동기가 아니지만 "디스패치 스레드가 다시 해제 될 때마다"발생합니다. 따라서 탭을 변경 한 직후에 포커스를 설정하려고하면 텍스트 상자가 아직 보이지 않고 그로 인해 포커스를받을 수는 없습니다. – Joey

+0

[혼자] (http://stackoverflow.com/q/4553412/1997232) 아니지만. 그래도 [mcve] (https://stackoverflow.com/help/mcve)를 사용하면 문제를 해결하기 위해 누군가를 유치 할 수 있습니다. – Sinatr

답변

0

사용 FocusManager.SetFocusedElement() 방법의 차이 무엇입니까.

포커스에는 약간의 차이가 있습니다 (you can learn more here).

XAML

<TabControl> 
    <TabItem Header="One" 
      x:Name="tabOne"> 
     <Button HorizontalAlignment="Center" 
       VerticalAlignment="Center" 
       Content="Set Focus" 
       Click="Button_Click" /> 
    </TabItem> 
    <TabItem Header="Two" 
      Name="tabTwo"> 

     <StackPanel> 
      <TextBox Name="txtOne" /> 
      <TextBox Name="txtTwo" /> 
     </StackPanel> 
    </TabItem> 
    <TabItem Header="Three" 
      x:Name="tabThree"> 
     <StackPanel> 
      <TextBox Name="txtThree" /> 
      <TextBox Name="txtFour" /> 
     </StackPanel> 
    </TabItem> 
</TabControl> 

CODE

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    tabTwo.IsSelected = true; 
    FocusManager.SetFocusedElement(tabTwo, txtTwo); 

} 
관련 문제