如何使用向上和向下键在WPF中移动treeviewitem选择

Ori*_*pax 3 wpf treeview wpf-controls

我们为树视图控件创建一个HierarchicalDataTemplate.我们可以使用鼠标单击树项来更改选择.现在,我们想使用键盘上下键来上下移动选择.但它似乎无法奏效.我通过Google和Stackoverflow搜索了很多,但都失败了.

所以我为此创建了一个新线程,你能帮我一下吗?谢谢.

<HierarchicalDataTemplate x:Uid="HierarchicalDataTemplate_1" x:Key="My_data_template" >
    <ContentControl x:Uid="ContentControl_1" MouseDoubleClick="MouseDoubleClick" MouseRightButtonDown="MouseRightClick">
        <Grid x:Uid="Grid_2" Background="Transparent">
            <Grid.ColumnDefinitions>
                <ColumnDefinition x:Uid="ColumnDefinition_1" Width="*"/>
                <ColumnDefinition x:Uid="ColumnDefinition_2" Width="Auto"/>
            </Grid.ColumnDefinitions>
            <StackPanel x:Uid="StackPanel_3" HorizontalAlignment="Left" Orientation="Horizontal" Grid.Column="0">
                <TextBlock x:Uid="TextBlock_13" Text="{Binding Name}" VerticalAlignment="Center" Margin="3,0,0,1" TextWrapping="NoWrap"/>
            </StackPanel>
            <CheckBox x:Uid="CheckBox_3" HorizontalAlignment="Right" Click="CheckBox_Click" Grid.Column="1" ToolTip="On/Off">
            </CheckBox>
        </Grid>
    </ContentControl>
</HierarchicalDataTemplate>
Run Code Online (Sandbox Code Playgroud)

另一个问题是,我可以使用鼠标单击文本块来选择项目,但是当我使用鼠标单击CheckBox时,无法选择该项目.有没有在我点击CheckBox时选择了treeview项?

我将模板应用于treeview的方式如下:

<TreeView   x:Name="tv_pointcloud" x:Uid="TreeListView_1" 
    ItemTemplateSelector="{StaticResource DataAccessor}" 
    ......
/>

public class DataAccessor : DataTemplateSelector
{
    public DataAccessor()
    {
        Init();
    }

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        var element = container as FrameworkElement;
        var template = element.FindResource("My_data_template") as DataTemplate;
        return template;
    }

    ......
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

小智 9

我遇到了和你一样的问题,在WPF树视图中,我无法使用箭头键进行导航.我发现的问题是获得焦点的Checkbox.所以我为复选框设置了"Focusable = False",现在树视图中的导航符合预期:

<CheckBox Focusable="False" ... />

  • 不要因为这里的低投票而气馁.这有效.将HierarchicalDataTemplate中所有控件的Focusable设置为false.这也将使您可以选择整个节点而不是其中的一部分. (3认同)