Я создаю шаблон TreeViewItem (каждый вид дерева в приложении должен иметь этот стиль). Когда элемент выбран, все родители этого также будут выбраны. Уровень кулак имеет другой стиль выбора.
пример дерева
Могу ли я сделать это только в шаблоне xaml?
редактировать: фактический шаблон
<Style x:Key="{x:Type TreeViewItem}"
TargetType="{x:Type TreeViewItem}">
<Setter Property="Foreground"
Value="{DynamicResource MenuForeground}" />
<Setter Property="FontFamily"
Value="SourceSansPro" />
<Setter Property="FontSize"
Value="16" />
<Setter Property="HorizontalContentAlignment"
Value="Left" />
<Setter Property="VerticalContentAlignment"
Value="Center" />
<Setter Property="Cursor"
Value="Arrow" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TreeViewItem}">
<ControlTemplate.Resources>
<local:LeftMarginMultiplierConverter Length="30"
Margin="49"
x:Key="lengthConverter" />
<local:LeftMarginMultiplierConverter Length="30"
Margin="32.9"
x:Key="lengthConverter2" />
</ControlTemplate.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="1">
<Border Name="Bd"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Padding="{TemplateBinding Padding}">
<Grid Margin="0">
<Border Name="Border"
Width="8"
Padding="0"
Background="{DynamicResource MenuBackground}"
VerticalAlignment="Stretch"
HorizontalAlignment="Left"
Visibility="Hidden">
<Border Name="BlueMark"
Background="{DynamicResource MenuOpenedItemBackground}"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
Visibility="Hidden">
</Border>
</Border>
<ToggleButton x:Name="Expander"
Margin="{Binding Converter={StaticResource lengthConverter2}, RelativeSource={RelativeSource TemplatedParent}}"
Style="{DynamicResource NuclearTreeViewItemToggleButton}"
IsChecked="{Binding Path=IsExpanded, RelativeSource={RelativeSource TemplatedParent}}"
ClickMode="Press" />
<ContentPresenter x:Name="PART_Header"
Margin="{Binding Converter={StaticResource lengthConverter}, RelativeSource={RelativeSource TemplatedParent}}"
ContentSource="Header"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" />
</Grid>
</Border>
<Border Name="ShadowEffect"
Margin="0,0,0,4"
Height="2"
Background="{DynamicResource MenuBackground}"
Visibility="Collapsed">
<Border.Effect>
<DropShadowEffect BlurRadius="3"
Color="#000000"
Direction="330"
Opacity="1" />
</Border.Effect>
</Border>
<ItemsPresenter x:Name="ItemsHost" />
</StackPanel>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsExpanded"
Value="false">
<Setter Property="Visibility"
Value="Collapsed"
TargetName="ItemsHost" />
</Trigger>
<Trigger Property="IsExpanded"
Value="True">
<Setter Property="Visibility"
Value="Visible"
TargetName="ShadowEffect"/>
</Trigger>
<Trigger Property="HasItems"
Value="false">
<Setter Property="Visibility"
Value="Hidden"
TargetName="Expander" />
</Trigger>
<Trigger Property="IsSelected"
Value="true">
<Setter Property="Foreground"
Value="{DynamicResource MenuSelectedItemForeground}" />
<Setter Property="Background"
Value="{DynamicResource MenuSelectedItemBackground}" />
<Setter Property="Visibility"
Value="Visible"
TargetName="Border"/>
<Setter Property="Visibility"
Value="Visible"
TargetName="BlueMark"/>
</Trigger>
<Trigger Property="IsEnabled"
Value="false">
<Setter Property="Foreground"
Value="{StaticResource {x:Static SystemColors.GrayTextBrushKey}}" />
</Trigger>
<Trigger Property="IsMouseOver"
Value="True"
SourceName="Bd">
<Setter Property="Background"
Value="{DynamicResource MenuItemFocus}" />
<Setter Property="Foreground"
Value="{DynamicResource MouseOverForeground}" />
<Setter Property="Background"
Value="{DynamicResource MenuItemFocus}"
TargetName="ShadowEffect"/>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="ItemsControl.HasItems" Value="False"/>
<Condition Property="IsSelected" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="Background"
Value="{DynamicResource MenuItemActual}" />
<Setter Property="Background"
TargetName="BlueMark"
Value="{DynamicResource MenuItemActual}" />
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="ItemsControl.HasItems" Value="False"/>
<Condition Property="IsMouseOver" Value="True"/>
<Condition Property="IsSelected" Value="False"/>
</MultiTrigger.Conditions>
<Setter Property="Background"
TargetName="BlueMark"
Value="{DynamicResource MenuItemFocus}" />
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Когда какой-то элемент выбран, я хочу выбрать всех его родителей. Я пытался продемонстрировать ситуацию на картинке. Первый уровень в виде дерева имеет другой стиль, чем другие уровни.