如何在WPF中使用上下箭头键移动TreeViewItem的选中项

4
我们为TreeView控件创建了一个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>

另外一个问题是,我可以用鼠标点击文本块选择项目,但是当我用鼠标点击复选框时,无法选择该项目。有没有方法使树形视图项目在单击复选框时被选中?

我将模板应用到树形视图的方式如下:

<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;
    }

    ......
}

thanks.


你是如何绑定到树形视图的呢? - Gayot Fow
当然可以,并且它工作得很好。我们遇到的问题仅仅就是我之前所说的那些。 - Orionpax
2个回答

10

我和你一样遇到了同样的问题,在一个 WPF 树形视图中无法使用方向键进行导航。我发现问题出在获取焦点的复选框上。所以我将复选框的 "Focusable = False",这样树形视图的导航就如预期那样:

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


3
不要因为这里点赞数较少而失去信心。这个方法是有效的。将HierarchicalDataTemplate中所有的控件的Focusable属性设为false。这样可以选择整个节点,而不仅仅是部分内容。 - Millie Smith

0

感谢您的帮助。目前,包含我的树形视图的用户控件可以接受上下键按下,但似乎无法将其转发到树形视图控件。 - Orionpax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接