0

I am creating TreeViewItem template (every treeview in app should have this style). When item is selected, all parents of this will be selected too. Fist level has different style of selection.

treeview example

Can I do it only in xaml template?

edit: actual template

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

When some item is selected I want select all it's parents. I tried demonstrate situation in the picture. First level in treeview has different style than another levels.

Ondra Rada
  • 19
  • 3

0 Answers0