Skip to content

Commit 32ef580

Browse files
committed
Merge branch 'AnimateUnderline' of https://github.com/l1pton17/MaterialDesignInXamlToolkit into l1pton17-AnimateUnderline
2 parents 4c97f24 + c0d5345 commit 32ef580

8 files changed

+313
-159
lines changed

MaterialDesignThemes.Wpf/MaterialDesignThemes.Wpf.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,7 @@
253253
<Compile Include="ToolTipAssist.cs" />
254254
<Compile Include="RippleAssist.cs" />
255255
<Compile Include="Ripple.cs" />
256+
<Compile Include="Underline.cs" />
256257
<Compile Include="ValidationAssist.cs" />
257258
<EmbeddedResource Include="Properties\Resources.resx">
258259
<Generator>ResXFileCodeGenerator</Generator>

MaterialDesignThemes.Wpf/Themes/Generic.xaml

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,59 @@
149149
</Setter.Value>
150150
</Setter>
151151
</Style>
152+
153+
<Style TargetType="{x:Type local:Underline}">
154+
<Setter Property="Background" Value="{DynamicResource PrimaryHueMidBrush}"/>
155+
<Setter Property="SnapsToDevicePixels" Value="True"/>
156+
<Setter Property="HorizontalAlignment" Value="Stretch"/>
157+
<Setter Property="VerticalAlignment" Value="Bottom"/>
158+
<Setter Property="Height" Value="2"/>
159+
<Setter Property="Template">
160+
<Setter.Value>
161+
<ControlTemplate>
162+
<ControlTemplate.Resources>
163+
<CircleEase x:Key="UnderlineEasingFunction" EasingMode="EaseOut"/>
164+
<Storyboard x:Key="ExpandUnderlineBorderStoryboard">
165+
<DoubleAnimation Storyboard.TargetName="UnderlineBorder"
166+
Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleX)"
167+
Duration="0:0:0.3"
168+
EasingFunction="{StaticResource UnderlineEasingFunction}"
169+
To="1"/>
170+
</Storyboard>
171+
<Storyboard x:Key="CollapseUnderlineBorderStoryboard">
172+
<DoubleAnimation Storyboard.TargetName="UnderlineBorder"
173+
Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleX)"
174+
Duration="0:0:0.3"
175+
EasingFunction="{StaticResource UnderlineEasingFunction}"
176+
To="0"/>
177+
</Storyboard>
178+
</ControlTemplate.Resources>
179+
<Border x:Name="UnderlineBorder"
180+
Background="{TemplateBinding Background}"
181+
IsHitTestVisible="False"
182+
Height="{TemplateBinding Height}"
183+
VerticalAlignment="{TemplateBinding VerticalAlignment}"
184+
HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
185+
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
186+
RenderTransformOrigin="0.5,0.5">
187+
<Border.RenderTransform>
188+
<ScaleTransform ScaleX="0" ScaleY="1"/>
189+
</Border.RenderTransform>
190+
</Border>
191+
<ControlTemplate.Triggers>
192+
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsActive}" Value="True">
193+
<DataTrigger.EnterActions>
194+
<BeginStoryboard Storyboard="{StaticResource ExpandUnderlineBorderStoryboard}"/>
195+
</DataTrigger.EnterActions>
196+
<DataTrigger.ExitActions>
197+
<BeginStoryboard Storyboard="{StaticResource CollapseUnderlineBorderStoryboard}"/>
198+
</DataTrigger.ExitActions>
199+
</DataTrigger>
200+
</ControlTemplate.Triggers>
201+
</ControlTemplate>
202+
</Setter.Value>
203+
</Setter>
204+
</Style>
152205

153206
<Style TargetType="{x:Type local:MaterialDateDisplay}">
154207
<Setter Property="Background" Value="Transparent" />

MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.ComboBox.xaml

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -185,9 +185,7 @@
185185
Text="{TemplateBinding wpf:TextFieldAssist.Hint}"
186186
Visibility="{TemplateBinding Text, Converter={StaticResource TextFieldHintVisibilityConverter}}" />
187187
<ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" Content="{TemplateBinding SelectionBoxItem}" ContentStringFormat="{TemplateBinding SelectionBoxItemStringFormat}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" IsHitTestVisible="false" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
188-
<Border BorderBrush="{DynamicResource PrimaryHueMidBrush}" BorderThickness="0 0 0 2"
189-
x:Name="focusBorder" Visibility="Hidden"
190-
Grid.ColumnSpan="2" />
188+
<wpf:Underline x:Name="Underline" Grid.ColumnSpan="2"/>
191189
</Grid>
192190
<ControlTemplate.Triggers>
193191
<Trigger Property="HasDropShadow" SourceName="PART_Popup" Value="true">
@@ -197,7 +195,6 @@
197195
<Setter Property="Height" TargetName="dropDownBorder" Value="95"/>
198196
</Trigger>
199197
<Trigger Property="IsKeyboardFocused" Value="True">
200-
<Setter TargetName="focusBorder" Property="Visibility" Value="Visible" />
201198
</Trigger>
202199
<MultiTrigger>
203200
<MultiTrigger.Conditions>
@@ -288,9 +285,7 @@
288285
IsHitTestVisible="False"
289286
Text="{TemplateBinding wpf:TextFieldAssist.Hint}" />
290287
<ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" Content="{TemplateBinding SelectionBoxItem}" ContentStringFormat="{TemplateBinding SelectionBoxItemStringFormat}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" IsHitTestVisible="false" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
291-
<Border BorderBrush="{DynamicResource PrimaryHueMidBrush}" BorderThickness="0 0 0 2"
292-
x:Name="focusBorder" Visibility="Hidden"
293-
Grid.ColumnSpan="2" />
288+
<wpf:Underline x:Name="Underline" Grid.ColumnSpan="2"/>
294289
</Grid>
295290
</Grid>
296291
<ControlTemplate.Triggers>
@@ -316,7 +311,6 @@
316311
<Setter Property="Height" TargetName="dropDownBorder" Value="95"/>
317312
</Trigger>
318313
<Trigger Property="IsKeyboardFocused" Value="True">
319-
<Setter TargetName="focusBorder" Property="Visibility" Value="Visible" />
320314
</Trigger>
321315
<MultiTrigger>
322316
<MultiTrigger.Conditions>
@@ -386,11 +380,9 @@
386380
Visibility="{TemplateBinding Text, Converter={StaticResource TextFieldHintVisibilityConverter}}" />
387381
<TextBox x:Name="PART_EditableTextBox" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" IsReadOnly="{Binding IsReadOnly, RelativeSource={RelativeSource TemplatedParent}}" Margin="{TemplateBinding Padding}" Style="{StaticResource MaterialDesignComboBoxEditableTextBox}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
388382
</Grid>
389-
</Border>
390-
<Border BorderBrush="{DynamicResource PrimaryHueMidBrush}" BorderThickness="0 0 0 2"
391-
x:Name="focusBorder" Visibility="Hidden"
392-
Grid.ColumnSpan="2" />
393-
</Grid>
383+
</Border>
384+
<wpf:Underline x:Name="Underline" Grid.ColumnSpan="2" BindIsKeyboardFocused="False"/>
385+
</Grid>
394386
<ControlTemplate.Triggers>
395387
<Trigger Property="HasDropShadow" SourceName="PART_Popup" Value="true">
396388
<Setter Property="Margin" TargetName="dropDownBorder" Value="5,5,5,5"/>
@@ -402,7 +394,7 @@
402394
<Setter Property="Height" TargetName="dropDownBorder" Value="95"/>
403395
</Trigger>
404396
<Trigger Property="IsKeyboardFocused" Value="True" SourceName="PART_EditableTextBox">
405-
<Setter TargetName="focusBorder" Property="Visibility" Value="Visible" />
397+
<Setter TargetName="Underline" Property="IsActive" Value="True"/>
406398
</Trigger>
407399
<MultiTrigger>
408400
<MultiTrigger.Conditions>
@@ -492,12 +484,14 @@
492484
Opacity="{Binding Path=(wpf:TextFieldAssist.HintOpacity), RelativeSource={RelativeSource TemplatedParent}}"
493485
Text="{TemplateBinding wpf:TextFieldAssist.Hint}"
494486
IsHitTestVisible="False" />
495-
<TextBox x:Name="PART_EditableTextBox" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" IsReadOnly="{Binding IsReadOnly, RelativeSource={RelativeSource TemplatedParent}}" Margin="{TemplateBinding Padding}" Style="{StaticResource MaterialDesignComboBoxEditableTextBox}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
487+
<TextBox x:Name="PART_EditableTextBox"
488+
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
489+
IsReadOnly="{Binding IsReadOnly, RelativeSource={RelativeSource TemplatedParent}}" Margin="{TemplateBinding Padding}"
490+
Style="{StaticResource MaterialDesignComboBoxEditableTextBox}"
491+
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
496492
</Grid>
497493
</Border>
498-
<Border BorderBrush="{DynamicResource PrimaryHueMidBrush}" BorderThickness="0 0 0 2"
499-
x:Name="focusBorder" Visibility="Hidden"
500-
Grid.ColumnSpan="2" />
494+
<wpf:Underline x:Name="Underline" Grid.ColumnSpan="2" BindIsKeyboardFocused="False"/>
501495
</Grid>
502496
<ControlTemplate.Triggers>
503497
<Trigger Property="wpf:TextFieldAssist.IsNullOrEmpty" Value="False">
@@ -525,7 +519,7 @@
525519
<Setter Property="Height" TargetName="dropDownBorder" Value="95"/>
526520
</Trigger>
527521
<Trigger Property="IsKeyboardFocused" Value="True" SourceName="PART_EditableTextBox">
528-
<Setter TargetName="focusBorder" Property="Visibility" Value="Visible" />
522+
<Setter TargetName="Underline" Property="IsActive" Value="True"/>
529523
</Trigger>
530524
<MultiTrigger>
531525
<MultiTrigger.Conditions>

0 commit comments

Comments
 (0)