2012-11-09 3 views
2

바운드 ItemsSource가있는 ItemsControl이있는 다른 StackPanel을 포함하는 ScrollViewer가 포함 된 StackPanel이 있다고 가정합니다. 이 ItemsSource는 런타임에 생성 된 Grid 컬렉션에 바인딩됩니다. 각 표에는 레이블과 텍스트 상자/콤보 상자/StackPanel 내에서 고유 한 TabIndex 값을 갖는 몇 개의 확인란이 있습니다.WPF 그리드의 키보드 탐색

<ScrollViewer Name="scrollViewer" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> 
    <StackPanel Name="stackPanel" MinWidth="500" Width="Auto"> 
    <ItemsControl Name="itemsControl"       ItemsSource="{Binding ElementName=SomeWindow, Path=GridsCollection,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> 
    </StackPanel> 
</ScrollViewer> 

내가 하나의 제어에서 다음 단순히 탭,하지만 그리드 컬렉션에서 그리드의 컨트롤 내에서 원하는 : 다음은 XAML입니다. 지금까지 나는 다른 KeyboardNavigation.Tab 네비게이션 설정을 시도했지만 행운이 없었다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

당신이 그런 식으로 행동 할 각 컨테이너에 대해 KeyboardNavigationMode.CycleTabNavigation 설정
+1

시나리오를 설명하기 위해 일부 XAML/코드를 게시하고 달성하고자하는 것이 정확히 무엇입니까? –

답변

1

, 그래서 초점은 당신이 Shift 키를 사용으로 탈출하지 않습니다 + :

KeyboardNavigation.SetTabNavigation(grid1, KeyboardNavigationMode.Cycle); 

Ctrl + 으로 변경하려는 경우 KeyboardNavigation.SetControlTabNavigation을 사용하십시오.

+0

감사합니다. 그러나 이것은 하나의 (주어진) 그리드 내에서 다른 컨트롤에 포커스를 배치하게합니다. 포커스가 하나의 그리드에서 다음 그리드로 또는 그리드 내의 하나의 컨트롤에서 동일한 그리드 내의 다음 컨트롤로 이동해야하므로 실제로는 그리드 모음이 있습니다. KeyboardNavigation을 StackPanel과 StackPanel의 ItemControl로 설정하려했지만 행운이 없었습니다. –

+0

이 게시물의 다른 답변에 대한 반응에서 언급했듯이 문제는 동적으로 생성 된 격자에서 컨트롤의 가시성에 있습니다. 나는 나중에 이것으로 돌아갈 것이다. 귀하의 답변에 감사드립니다. –

2

그런 다음 당신은 당신이 탭으로 할 수 있도록하려면 단지 무엇을 위해 그것을 다시 활성화, 모든 컨트롤에 대한 탭 이동 비활성화 암시 적 스타일을 적용 할 수 있습니다

<ScrollViewer Name="scrollViewer" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> 
    <ScrollViewer.Resources> 
     <Style TargetType="Control"> 
      <Setter Property="IsTabStop" Value="False" /> 
     </Style> 
    </ScrollViewer.Resources> 
    <StackPanel Name="stackPanel" MinWidth="500" Width="Auto"> 
    <ItemsControl Name="itemsControl"       
        ItemsSource="{Binding ElementName=SomeWindow, Path=GridsCollection,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> 
    </StackPanel> 
</ScrollViewer> 

가에 IsTabStop을 설정하는 것을 잊지 마세요 당신의 동적으로 생성 된 그리드를 True로 설정

+0

System.Windows.Controls.Grid에는 .Net 4.0의 IsTabStop 속성이없는 것 같지만 그 점을 제외하고는 대답 해 주셔서 감사합니다. 나는 그것을 시도하고 두 답변이 작동하지 않는 이유를 알아 냈습니다. 동적으로 생성 된 격자의 컨트롤은 런타임에 IsVisible을 false로 설정했습니다. 그러나 여전히 볼 수는 있지만 명시 적으로 코드의 가시성을 설정합니다. 또 다른 도전은 ... :) –