Skip to content

Commit 7168183

Browse files
committed
Make truly treeview expand animation
1 parent db424f2 commit 7168183

File tree

3 files changed

+78
-33
lines changed

3 files changed

+78
-33
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Diagnostics;
4+
using System.Globalization;
5+
using System.Linq;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
using System.Windows.Data;
9+
10+
namespace MaterialDesignThemes.Wpf.Converters
11+
{
12+
public enum MathOperation
13+
{
14+
Add,
15+
Sub,
16+
Multiply,
17+
Divide
18+
}
19+
20+
public sealed class MathMultipleConverter : IMultiValueConverter
21+
{
22+
public MathOperation Operation { get; set; }
23+
24+
public object Convert(object[] value, Type targetType, object parameter, CultureInfo culture)
25+
{
26+
double value1, value2;
27+
if (Double.TryParse(value[0].ToString(), out value1) && Double.TryParse(value[1].ToString(), out value2))
28+
{
29+
switch (Operation)
30+
{
31+
default:
32+
case MathOperation.Add:
33+
return value1 + value2;
34+
case MathOperation.Divide:
35+
return value1 / value2;
36+
case MathOperation.Multiply:
37+
return value1 * value2;
38+
case MathOperation.Sub:
39+
return value1 - value2;
40+
}
41+
}
42+
43+
return Binding.DoNothing;
44+
}
45+
46+
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
47+
{
48+
throw new NotImplementedException();
49+
}
50+
}
51+
}

MaterialDesignThemes.Wpf/MaterialDesignThemes.Wpf.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@
216216
<Compile Include="Converters\ClockItemIsCheckedConverter.cs" />
217217
<Compile Include="Converters\ClockLineConverter.cs" />
218218
<Compile Include="Converters\DrawerOffsetConverter.cs" />
219+
<Compile Include="Converters\MathMultipleConverter.cs" />
219220
<Compile Include="Converters\NotConverter.cs" />
220221
<Compile Include="Converters\NotNullToVisibilityConverter.cs" />
221222
<Compile Include="Converters\NotZeroToVisibilityConverter.cs" />

MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TreeView.xaml

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
22
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
33
xmlns:wpf="clr-namespace:MaterialDesignThemes.Wpf"
4-
xmlns:converters="clr-namespace:MaterialDesignThemes.Wpf.Converters">
4+
xmlns:converters="clr-namespace:MaterialDesignThemes.Wpf.Converters"
5+
xmlns:system="clr-namespace:System;assembly=mscorlib">
56

67
<ResourceDictionary.MergedDictionaries>
78
<ResourceDictionary>
89
<converters:BrushRoundConverter x:Key="BrushRoundConverter"/>
10+
<converters:MathMultipleConverter x:Key="MathMlpMultipleConverter" Operation="Multiply" />
911
</ResourceDictionary>
1012
</ResourceDictionary.MergedDictionaries>
1113

@@ -216,11 +218,7 @@
216218
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
217219
<EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="1"/>
218220
</DoubleAnimationUsingKeyFrames>
219-
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.LayoutTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="ItemsHost">
220-
<EasingDoubleKeyFrame KeyTime="0" Value=".5"/>
221-
<EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="1"/>
222-
</DoubleAnimationUsingKeyFrames>
223-
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.LayoutTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="ItemsHost">
221+
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Tag" Storyboard.TargetName="ItemsScrollViewer">
224222
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
225223
<EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="1"/>
226224
</DoubleAnimationUsingKeyFrames>
@@ -235,11 +233,7 @@
235233
<EasingDoubleKeyFrame KeyTime="0" Value="1"/>
236234
<EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0"/>
237235
</DoubleAnimationUsingKeyFrames>
238-
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.LayoutTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="ItemsHost">
239-
<EasingDoubleKeyFrame KeyTime="0" Value="1"/>
240-
<EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=".5"/>
241-
</DoubleAnimationUsingKeyFrames>
242-
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.LayoutTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="ItemsHost">
236+
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Tag" Storyboard.TargetName="ItemsScrollViewer">
243237
<EasingDoubleKeyFrame KeyTime="0" Value="1"/>
244238
<EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"/>
245239
</DoubleAnimationUsingKeyFrames>
@@ -251,10 +245,7 @@
251245
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Storyboard.TargetName="ItemsHost">
252246
<EasingDoubleKeyFrame KeyTime="0" Value="1"/>
253247
</DoubleAnimationUsingKeyFrames>
254-
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.LayoutTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="ItemsHost">
255-
<EasingDoubleKeyFrame KeyTime="0:0:0" Value="1"/>
256-
</DoubleAnimationUsingKeyFrames>
257-
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.LayoutTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="ItemsHost">
248+
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Tag" Storyboard.TargetName="ItemsScrollViewer">
258249
<EasingDoubleKeyFrame KeyTime="0:0:0" Value="1"/>
259250
</DoubleAnimationUsingKeyFrames>
260251
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="ItemsHost" Storyboard.TargetProperty="Visibility">
@@ -267,10 +258,7 @@
267258
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Storyboard.TargetName="ItemsHost">
268259
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
269260
</DoubleAnimationUsingKeyFrames>
270-
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.LayoutTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="ItemsHost">
271-
<EasingDoubleKeyFrame KeyTime="0:0:0" Value=".5"/>
272-
</DoubleAnimationUsingKeyFrames>
273-
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.LayoutTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="ItemsHost">
261+
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Tag" Storyboard.TargetName="ItemsScrollViewer">
274262
<EasingDoubleKeyFrame KeyTime="0:0:0" Value="0"/>
275263
</DoubleAnimationUsingKeyFrames>
276264
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="ItemsHost" Storyboard.TargetProperty="Visibility">
@@ -310,20 +298,25 @@
310298
<ContentPresenter x:Name="PART_Header" ContentSource="Header"/>
311299
</wpf:Ripple>
312300
</Grid>
313-
314-
<ItemsPresenter x:Name="ItemsHost" Grid.ColumnSpan="2" Grid.Column="1" Grid.Row="1" RenderTransformOrigin="0,0"
315-
Opacity="0"
316-
Margin="-16 0 0 0"
317-
Visibility="Collapsed">
318-
<ItemsPresenter.LayoutTransform>
319-
<TransformGroup>
320-
<ScaleTransform ScaleX=".5" ScaleY="0"/>
321-
<SkewTransform/>
322-
<RotateTransform/>
323-
<TranslateTransform/>
324-
</TransformGroup>
325-
</ItemsPresenter.LayoutTransform>
326-
</ItemsPresenter>
301+
302+
<ScrollViewer Grid.Column="1" Grid.Row="1"
303+
x:Name="ItemsScrollViewer"
304+
Margin="-16 0 0 0"
305+
VerticalScrollBarVisibility="Hidden"
306+
Grid.ColumnSpan="2">
307+
<ScrollViewer.Tag>
308+
<system:Double>0.0</system:Double>
309+
</ScrollViewer.Tag>
310+
<ScrollViewer.Height>
311+
<MultiBinding Converter="{StaticResource MathMlpMultipleConverter}">
312+
<Binding ElementName="ItemsHost" Path="ActualHeight"/>
313+
<Binding RelativeSource="{RelativeSource Self}" Path="Tag"/>
314+
</MultiBinding>
315+
</ScrollViewer.Height>
316+
<ItemsPresenter x:Name="ItemsHost"
317+
Opacity="0"
318+
Visibility="Collapsed"/>
319+
</ScrollViewer>
327320
</Grid>
328321
<ControlTemplate.Triggers>
329322
<Trigger Property="HasItems" Value="false">

0 commit comments

Comments
 (0)