我们为树视图控件创建一个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>
另一个问题是,我可以使用鼠标单击文本块来选择项目,但是当我使用鼠标单击CheckBox时,无法选择该项目。有没有在我点击CheckBox时选择了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;
}
......
}
感谢。
答案 0 :(得分:8)
我遇到了和你一样的问题,在WPF树形视图中,我无法使用箭头键进行导航。我发现的问题是获得焦点的Checkbox。所以我为复选框设置了“Focusable = False”,现在树视图中的导航符合预期:
<CheckBox Focusable="False" ... />
答案 1 :(得分:0)
键盘命令等称为手势。也许这是一个让你入门的好地方: