2010-06-25 6 views
1

WPF에 익숙하지 않은 종류의 일반 사용자 입력 양식과 확장기에 숨겨진 '세부 정보'섹션이있는 앱을 만들고 있습니다. 사용자가 확장기 컨트롤에 탭을 추가하면 자동으로 해당 확장기의 첫 번째 컨트롤에 포커스가 놓이게됩니다.WPF 키보드 탐색 : 패널을 확장하고 해당 패널의 첫 번째 컨트롤에 포커스를 두는 방법은 무엇입니까?

일부 벗었 XAML은 :


<StackPanel> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="24"/> 
      <RowDefinition Height="24"/> 
     </Grid.RowDefinitions> 

     <Label Content="Email" Grid.Row="0" Grid.Column="0"/> 
     <TextBox Grid.Row="0" Grid.Column="1"/> 

     <Label Content="Department" Grid.Row="0" Grid.Column="2"/> 
     <TextBox Grid.Row="0" Grid.Column="3"/> 

     <Label Content="Contact Name" Grid.Row="1" Grid.Column="0"/> 
     <TextBox Grid.Row="1' Grid.Column="1"/> 

     <Label Content="Phone Number" Grid.Row="1" Grid.Column="2"/> 
     <TextBox Grid.Row="1" Grid.Column="3"/> 

    </Grid> 

    <Expander ExpandDirection="Down" IsExpanded="False" Header="Details"> 
      <StackPanel Orientation="Horizontal"> 
       <Label Content="Address"/> 
       <TextBox /> 
       <Button Content="Add Another" /> 
      </StackPanel> 
    </Expander> 
</StackPanel> 

내가 뭘하고 싶은 사용자가 현재 전화 번호를 입력하고 탭을 명중하는 경우 세부 확장기가 확장 주소의 텍스트 상자에 초점을 두어야한다는 것입니다 . 나는 TabIndex를 설정하고 KeyboardNavigation.Tab을 가지고 놀려고 노력했다. 아무런 운이없이.

아이디어가 있습니까?

답변

1

는 EventTrigger 및 스토리 보드를 사용하여 XAML을 다음과 같이 당신의 확장기를 교체 :

<Expander ExpandDirection="Down" 
      IsExpanded="False" 
      Header="Details"> 
    <Expander.Style> 
    <Style> 
     <Style.Triggers> 
     <EventTrigger RoutedEvent="Expander.GotFocus"> 
      <EventTrigger.Actions> 
      <BeginStoryboard> 
       <Storyboard> 
       <BooleanAnimationUsingKeyFrames 
        Storyboard.TargetProperty="(Expander.IsExpanded)"> 
        <DiscreteBooleanKeyFrame 
        KeyTime="00:00:01" 
        Value="True" /> 
       </BooleanAnimationUsingKeyFrames> 
       </Storyboard> 
      </BeginStoryboard> 
      </EventTrigger.Actions> 
     </EventTrigger> 
     </Style.Triggers>        
    </Style> 
    </Expander.Style> 
    <StackPanel Orientation="Horizontal"> 
    <Label Content="Address"/> 
    <TextBox /> 
    <Button Content="Add Another" /> 
    </StackPanel> 
</Expander> 
+0

위대한 작품입니다. 감사합니다 Zamboni. – Adam

0

여기에는 순수한 Xaml 방식이 없다고 생각합니다. 1) 확장기를 확장하고 2) 첫 번째 컨트롤에서 Focus() 메서드를 호출하려면 확장기의 GotFocus 이벤트를 처리해야 할 수 있습니다.

+0

나는 확장기에 GotFocus 이벤트를 추가하는 시도하지만 난 MoveFocus를 사용하고 때 확장기의 외부에 초점을 전달합니다. 확장기 내부의 컨트롤에 포커스를 보내는 방법에 대한 의견이 있으십니까? – Adam

관련 문제