У меня проблема с клавиатурной навигацией в моем дереве.Я реализую таблицу из 3 столбцов.Каждый элемент в первом столбце состоит из 3 столбцов: значок, текстовый блок и расширитель.Если свойство элемента "hasItems" имеет значение false, расширитель скрыт.Моя проблема в том, что я не могу использовать стрелки вверх и вниз для перемещения вверх и вниз по дереву.Я попытался установить для свойства экспандера IsTabStop значение true, но это не дает мне требуемого результата.Такое ощущение, что расширитель захватывает фокус: стрелки вверх и вниз фокусируют и выключают только расширитель (когда я удаляю расширитель, навигация работает как положено).
Это какой-то псевдокод,просто чтобы объяснить мой нанятый:
<ScrollViewer >
<TreeView ItemsSource="{Binding TreeRootInstance}">
<TreeView.Resources>
<DataTemplate x:Key="CellTemplate">
<Border >
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition />
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Image Grid.Column="0"/>
<TextBlock Text="{Binding Name}" Grid.Column="1" />
<ToggleButton x:Name="Expander"
Grid.Column="2"
IsChecked="{Binding Path=IsExpanded, RelativeSource={RelativeSource AncestorType={x:Type TreeViewItem}}}"
ClickMode="Press"/>
</Grid>
</Border>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=HasItems, RelativeSource={RelativeSource AncestorType={x:Type TreeViewItem}}}" Value="False">
<Setter TargetName="Expander" Property="Visibility" Value="Hidden"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
<GridViewColumnCollection x:Key="gvcc">
<GridViewColumn CellTemplate="{StaticResource CellTemplate}" >
<GridViewColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="First Column" />
</DataTemplate>
</GridViewColumn.HeaderTemplate>
</GridViewColumn>
<GridViewColumn>
<GridViewColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="Second Column" />
</DataTemplate>
</GridViewColumn.HeaderTemplate>
<GridViewColumn.CellTemplate>
<DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn >
<GridViewColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="Third Column"/>
</DataTemplate>
</GridViewColumn.HeaderTemplate>
</GridViewColumn>
</GridViewColumnCollection>
<Style TargetType="{x:Type TreeView}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TreeView}">
<Border BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<DockPanel>
<GridViewHeaderRowPresenter Columns="{StaticResource gvcc}"
ColumnHeaderContainerStyle="{StaticResource TreeHeaderStyle}"
Margin="0"
DockPanel.Dock="Top"/>
<ItemsPresenter/>
</DockPanel>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Спасибо, Ли