Я пытаюсь создать стилизованный элемент управления для проекта WPF. По сути, я хочу получить коллекцию узлов в древовидной структуре, например элемент управления, с подузлами или без них. Поведение, которого я пытаюсь достичь, в начале все узлы будут свернуты. Если вы выбираете узел, он расширяет узел, если вы выбираете другой узел, он расширяет этот узел. Если вы находитесь на выбранном узле, и он развернут, он включает расширение.
Пока у меня есть ControlTemplate, подобный этому
<ControlTemplate TargetType="{x:Type TreeViewItem}">
<StackPanel>
<Border x:Name="Border"
MinHeight="{TemplateBinding MinHeight}"
Padding="{TemplateBinding Padding}"
Background="Red"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}">
<Grid>
<ToggleButton x:Name="Expander"
ClickMode="Press"
Style="{StaticResource FlatToggleButton}"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
IsChecked="{Binding Path=IsExpanded, RelativeSource={x:Static RelativeSource.TemplatedParent}, Mode=TwoWay}"/>
<ContentPresenter x:Name="PART_Header"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
ContentSource="Header"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
</Grid>
</Border>
<ItemsPresenter x:Name="ItemsHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
</StackPanel>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" TargetName="Expander" Value="White"/>
</Trigger>
<Trigger Property="IsExpanded" Value="False">
<Setter TargetName="ItemsHost" Property="Visibility" Value="Collapsed"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
Основная проблема, как представляется, заключается в том, что ToggleButton блокирует событие click для перемещения вверх в TreeView и установки IsSelected