2012-05-01 35 views
1

我们有一个ListView要求是可以通过键盘访问列标题,这在默认的ListView中不会发生。例如:GridViewColumnHeaders的键盘访问?

<StackPanel x:Name="LayoutRoot"> 
    <ListView HorizontalAlignment="Left" KeyboardNavigation.TabNavigation="Local"> 
     <ListView.View> 
      <GridView > 
       <GridViewColumn Header="Header _1" KeyboardNavigation.TabIndex="0"/> 
       <GridViewColumn Header="Header _2" KeyboardNavigation.TabIndex="1"/> 
       <GridViewColumn Header="header _3" KeyboardNavigation.TabIndex="2"/> 
      </GridView> 
     </ListView.View> 
     <ListViewItem Content="I'm the first item" /> 
     <ListViewItem Content="I'm the second item" /> 
    </ListView> 
    <Button Content="I can also get focus" HorizontalAlignment="Left" Margin="0,27,0,0"/> 
</StackPanel> 

访问键显示标题,但它们没有获得键盘焦点。我从阅读这个问题中添加的TabIndex和TabNavigation: tabbing to TextBoxes in column headers

我需要做些什么来使GridViewColumnHeaders键盘可访问?

回答

1

内部有人有解决方案。在GridViewColumnHeader的ControlTemplate,设置ContentPresenter要成为焦点=真实的,就像这样:

  <ContentPresenter x:Name="ContentPresenter" 
       Style="{StaticResource ListViewContentPresenterStyle}" 
       ContentTemplate="{TemplateBinding ContentTemplate}" 
       SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
       RecognizesAccessKey="True" 
       Focusable="True" 
       Grid.Column="1"> 

此外,设置的ListView KeyboardNavigation.TabNavigation =本地。