wpf - GridViewColumnHeaders 的键盘访问?

标签 wpf xaml gridview gridviewcolumn

我们对 ListView 的要求是列标题可以通过键盘访问,而默认的 ListView 则不会出现这种情况。例如:

    <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 键盘可访问?

最佳答案

内部有人找到了解决方案。在 GridViewColumnHeader ControlTemplate 中,将 ContentPresenter 设置为 Focusable=true,如下所示:

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

此外,设置 ListView KeyboardNavigation.TabNavigation=Local。

关于wpf - GridViewColumnHeaders 的键盘访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10402068/

相关文章:

c# - 构建支持我自己的自定义事件的 EventTriggerBehavior

wpf - 如何在 GridViewRowPresenter 中设置 ContentPresenter 属性?

android - 将按钮 onClick 传递回主要 Activity 的最佳方式?

c# - 如何将字符串列排序为 GridView 中的日期时间列

wpf - 如何用另一个键定义相同的资源?

c# - 如何获取gridview的数据源

wpf - 如何禁用 WPF 对话框确定按钮以响应自定义 ValidationRule 类确定的无效输入?

c# - 通过单击删除键按钮删除 DataGrid 行 (WPF)

c# - 自定义 ItemsControl 和选择支持

c# - INotifyPropertyChanged 和 BaseClass C# 上的属性