Themes/MaterialDesignTheme.TreeListView.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:converters="clr-namespace:MaterialDesignThemes.Wpf.Converters" xmlns:wpf="clr-namespace:MaterialDesignThemes.Wpf" xmlns:internal="clr-namespace:MaterialDesignThemes.Wpf.Internal"> <Style x:Key="MaterialDesignTreeListViewToggleButtonStyle" TargetType="{x:Type ToggleButton}"> <Setter Property="Background" Value="Transparent" /> <Setter Property="Focusable" Value="False" /> <Setter Property="Height" Value="16" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ToggleButton}"> <Border Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" Background="{TemplateBinding Background}"> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CheckStates"> <VisualStateGroup.Transitions> <VisualTransition From="Unchecked" To="Checked"> <VisualTransition.GeneratedEasingFunction> <QuarticEase EasingMode="EaseOut" /> </VisualTransition.GeneratedEasingFunction> <Storyboard> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="ExpandPath" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)"> <EasingDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="45" /> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> <VisualTransition From="Checked" To="Unchecked"> <VisualTransition.GeneratedEasingFunction> <QuarticEase EasingMode="EaseOut" /> </VisualTransition.GeneratedEasingFunction> <Storyboard> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="ExpandPath" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)"> <EasingDoubleKeyFrame KeyTime="0" Value="45" /> <EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="0" /> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> </VisualStateGroup.Transitions> <VisualState x:Name="Checked"> <Storyboard> <DoubleAnimation Storyboard.TargetName="ExpandPath" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)" To="45" Duration="0" /> </Storyboard> </VisualState> <VisualState x:Name="Unchecked"> <Storyboard> <DoubleAnimation Storyboard.TargetName="ExpandPath" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)" To="0" Duration="0" /> </Storyboard> </VisualState> </VisualStateGroup> </VisualStateManager.VisualStateGroups> <Viewbox> <Canvas Width="24" Height="24"> <Path x:Name="ExpandPath" Data="M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z" Fill="{TemplateBinding Foreground}" RenderTransformOrigin=".5,.5" SnapsToDevicePixels="True" Stroke="{TemplateBinding Foreground}"> <Path.RenderTransform> <TransformGroup> <ScaleTransform /> <SkewTransform /> <RotateTransform Angle="0" CenterX="4" CenterY="4" /> <TranslateTransform /> </TransformGroup> </Path.RenderTransform> </Path> </Canvas> </Viewbox> </Border> </ControlTemplate> </Setter.Value> </Setter> <Setter Property="Width" Value="16" /> </Style> <Style x:Key="MaterialDesignTreeListViewItemFocusVisual"> <Setter Property="Control.Template"> <Setter.Value> <ControlTemplate> <Rectangle /> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style x:Key="MaterialDesignTreeListViewItem" TargetType="{x:Type wpf:TreeListViewItem}"> <Setter Property="Background" Value="Transparent" /> <Setter Property="BorderThickness" Value="0" /> <Setter Property="FocusVisualStyle" Value="{StaticResource MaterialDesignTreeListViewItemFocusVisual}" /> <Setter Property="Foreground" Value="{Binding Foreground, RelativeSource={RelativeSource AncestorType={x:Type wpf:TreeListView}}}" /> <Setter Property="HorizontalContentAlignment" Value="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" /> <Setter Property="Padding" Value="8" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type wpf:TreeListViewItem}"> <Grid> <Grid.Margin> <MultiBinding Converter="{x:Static converters:TreeListViewIndentConverter.Instance}"> <Binding Path="LevelIndentSize" RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type wpf:TreeListView}}" /> <Binding Path="Level" RelativeSource="{RelativeSource TemplatedParent}" /> </MultiBinding> </Grid.Margin> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition /> </Grid.RowDefinitions> <VisualStateManager.VisualStateGroups> <VisualStateGroup Name="CommonStates"> <VisualStateGroup.Transitions> <VisualTransition GeneratedDuration="0:0:0.3" To="Normal"> <VisualTransition.GeneratedEasingFunction> <CubicEase EasingMode="EaseOut" /> </VisualTransition.GeneratedEasingFunction> </VisualTransition> </VisualStateGroup.Transitions> <VisualState Name="Normal" /> <VisualState Name="MouseOver"> <Storyboard> <DoubleAnimation Storyboard.TargetName="MouseOverBorder" Storyboard.TargetProperty="Opacity" To="0.1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MouseOverBorder" Storyboard.TargetProperty="Opacity" To="0.1" Duration="0" /> </Storyboard> </VisualState> <VisualState Name="Disabled" /> </VisualStateGroup> <VisualStateGroup x:Name="SelectionStates"> <VisualStateGroup.Transitions> <VisualTransition GeneratedDuration="0:0:0.6" /> </VisualStateGroup.Transitions> <VisualState Name="Selected"> <Storyboard> <DoubleAnimation Storyboard.TargetName="SelectedBorder" Storyboard.TargetProperty="Opacity" To="0.18" Duration="0" /> </Storyboard> </VisualState> <VisualState Name="Unselected" /> </VisualStateGroup> <VisualStateGroup x:Name="ExpansionStates"> <VisualState x:Name="Expanded" /> <VisualState x:Name="Collapsed" /> </VisualStateGroup> </VisualStateManager.VisualStateGroups> <ToggleButton x:Name="Expander" Width="{TemplateBinding wpf:TreeViewAssist.ExpanderSize}" Height="{TemplateBinding wpf:TreeViewAssist.ExpanderSize}" Margin="8,0,8,0" VerticalAlignment="Center" ClickMode="Press" Foreground="{TemplateBinding Foreground}" IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource MaterialDesignTreeListViewToggleButtonStyle}" /> <Border x:Name="MouseOverBorder" Grid.Column="1" Grid.ColumnSpan="2" Background="{TemplateBinding Foreground, Converter={x:Static converters:BrushRoundConverter.Instance}}" IsHitTestVisible="False" Opacity="0" /> <Border x:Name="SelectedBorder" Grid.Column="1" Grid.ColumnSpan="2" Background="{TemplateBinding Foreground, Converter={x:Static converters:BrushRoundConverter.Instance}}" IsHitTestVisible="False" Opacity="0" /> <Grid x:Name="ContentGrid" Grid.Column="1" Grid.ColumnSpan="2" Background="{TemplateBinding Background}"> <wpf:Ripple x:Name="Ripple" Padding="{TemplateBinding Padding}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" Feedback="{TemplateBinding Foreground, Converter={x:Static converters:BrushRoundConverter.Instance}}" Focusable="False" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"> <internal:TreeListViewContentPresenter x:Name="PART_ContentPresenter" ContentSource="Content" /> </wpf:Ripple> </Grid> <ContentControl x:Name="AdditionalContentControl" Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" Content="{TemplateBinding Content}" ContentTemplate="{Binding RelativeSource={RelativeSource Self}, Path=(wpf:TreeViewAssist.AdditionalTemplate)}" ContentTemplateSelector="{Binding RelativeSource={RelativeSource Self}, Path=(wpf:TreeViewAssist.AdditionalTemplateSelector)}" Visibility="Collapsed" /> </Grid> <ControlTemplate.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=(wpf:TreeViewAssist.AdditionalTemplate), Converter={x:Static converters:NullableToVisibilityConverter.CollapsedInstance}, Mode=OneWay}" Value="Visible"> <Setter TargetName="AdditionalContentControl" Property="Visibility" Value="Visible" /> </DataTrigger> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=(wpf:TreeViewAssist.AdditionalTemplateSelector), Converter={x:Static converters:NullableToVisibilityConverter.CollapsedInstance}, Mode=OneWay}" Value="Visible"> <Setter TargetName="AdditionalContentControl" Property="Visibility" Value="Visible" /> </DataTrigger> <Trigger Property="HasItems" Value="false"> <Setter TargetName="Expander" Property="Visibility" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:TreeViewAssist.HasNoItemsExpanderVisibility)}" /> </Trigger> <Trigger Property="IsEnabled" Value="false"> <Setter Property="Opacity" Value=".56" /> </Trigger> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=(wpf:TreeViewAssist.ShowSelection)}" Value="False"> <Setter TargetName="MouseOverBorder" Property="Visibility" Value="Collapsed" /> <Setter TargetName="Ripple" Property="Feedback" Value="Transparent" /> <Setter TargetName="SelectedBorder" Property="Visibility" Value="Collapsed" /> </DataTrigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> <Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" /> <Setter Property="wpf:TreeViewAssist.ExpanderSize" Value="16" /> <Setter Property="wpf:TreeViewAssist.HasNoItemsExpanderVisibility" Value="{Binding RelativeSource={RelativeSource AncestorType=wpf:TreeListView}, Path=(wpf:TreeViewAssist.HasNoItemsExpanderVisibility)}" /> <Setter Property="wpf:TreeViewAssist.ShowSelection" Value="True" /> </Style> <Style x:Key="MaterialDesignTreeListView" TargetType="{x:Type wpf:TreeListView}"> <Setter Property="Background" Value="Transparent" /> <Setter Property="BorderBrush" Value="{x:Null}" /> <Setter Property="BorderThickness" Value="0" /> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Foreground}" /> <Setter Property="Padding" Value="1" /> <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" /> <Setter Property="ScrollViewer.PanningMode" Value="Both" /> <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" /> <Setter Property="Stylus.IsFlicksEnabled" Value="False" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type wpf:TreeListView}"> <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="true"> <ScrollViewer x:Name="PART_ScrollViewer" wpf:ScrollViewerAssist.IgnorePadding="{Binding Path=(wpf:ScrollViewerAssist.IgnorePadding), RelativeSource={RelativeSource TemplatedParent}}" wpf:ScrollViewerAssist.PaddingMode="{Binding Path=(wpf:ScrollViewerAssist.PaddingMode), RelativeSource={RelativeSource TemplatedParent}}" Padding="{TemplateBinding Padding}" Background="{TemplateBinding Background}" CanContentScroll="false" Focusable="false" HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}"> <ItemsPresenter /> </ScrollViewer> </Border> <ControlTemplate.Triggers> <Trigger Property="IsEnabled" Value="false"> <Setter Property="Opacity" Value=".56" /> </Trigger> <Trigger Property="VirtualizingPanel.IsVirtualizing" Value="true"> <Setter TargetName="PART_ScrollViewer" Property="CanContentScroll" Value="true" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> <Setter Property="VerticalContentAlignment" Value="Center" /> <Setter Property="wpf:TreeViewAssist.HasNoItemsExpanderVisibility" Value="Hidden" /> <Style.Triggers> <Trigger Property="VirtualizingPanel.IsVirtualizing" Value="true"> <Setter Property="ItemsPanel"> <Setter.Value> <ItemsPanelTemplate> <VirtualizingStackPanel /> </ItemsPanelTemplate> </Setter.Value> </Setter> </Trigger> </Style.Triggers> </Style> <Style TargetType="{x:Type wpf:TreeListView}" BasedOn="{StaticResource MaterialDesignTreeListView}" /> <Style TargetType="{x:Type wpf:TreeListViewItem}" BasedOn="{StaticResource MaterialDesignTreeListViewItem}" /> </ResourceDictionary> |