Skip to content

Commit e9b41de

Browse files
committed
Merge branch 'extended-smarthint' of https://github.com/mgnslndh/MaterialDesignInXamlToolkit into mgnslndh-extended-smarthint
2 parents 9103f10 + a147c57 commit e9b41de

File tree

7 files changed

+147
-39
lines changed

7 files changed

+147
-39
lines changed

MainDemo.Wpf/TextFields.xaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,15 @@
202202
materialDesign:HintAssist.Hint="Floating Password"
203203
Style="{StaticResource MaterialDesignFloatingHintPasswordBox}" />
204204

205+
<TextBox Grid.Row="6" Grid.Column="3"
206+
materialDesign:HintAssist.Hint="Large Font Size"
207+
materialDesign:HintAssist.FloatingScale="0.54"
208+
materialDesign:HintAssist.FloatingOffset="1,-54"
209+
Text="Some Text"
210+
Style="{StaticResource MaterialDesignFloatingHintTextBox}"
211+
FontSize="24"/>
212+
213+
205214
<TextBlock Grid.Row="7" Grid.Column="1" Style="{StaticResource MaterialDesignSubheadingTextBlock}"
206215
Margin="0 48 0 0">DataTemplate Test</TextBlock>
207216
<ContentControl Grid.Row="8" Grid.Column="1" Grid.ColumnSpan="4"
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Globalization;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
using System.Windows.Data;
8+
9+
namespace MaterialDesignThemes.Wpf.Converters
10+
{
11+
public class DoubleRangeMultiConverter : IMultiValueConverter
12+
{
13+
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
14+
{
15+
if(values.Length != 3)
16+
{
17+
throw new ArgumentException("Expected three arguments", nameof(values));
18+
}
19+
20+
var percentage = (double)values[0];
21+
var from = (double)values[1];
22+
var to = (double)values[2];
23+
24+
var result = from + (to - from) * percentage;
25+
26+
return result;
27+
}
28+
29+
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
30+
{
31+
throw new NotImplementedException();
32+
}
33+
}
34+
}

MaterialDesignThemes.Wpf/HintAssist.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,41 @@ public static void SetIsFloating(DependencyObject element, bool value)
2424

2525
#endregion
2626

27+
#region FloatingScale & FloatingOffset
28+
29+
public static readonly DependencyProperty FloatingScaleProperty = DependencyProperty.RegisterAttached(
30+
"FloatingScale",
31+
typeof(double),
32+
typeof(HintAssist),
33+
new FrameworkPropertyMetadata(0.74d, FrameworkPropertyMetadataOptions.Inherits));
34+
35+
public static double GetFloatingScale(DependencyObject element)
36+
{
37+
return (double)element.GetValue(FloatingScaleProperty);
38+
}
39+
40+
public static void SetFloatingScale(DependencyObject element, double value)
41+
{
42+
element.SetValue(FloatingScaleProperty, value);
43+
}
44+
45+
public static readonly DependencyProperty FloatingOffsetProperty = DependencyProperty.RegisterAttached(
46+
"FloatingOffset",
47+
typeof(Point),
48+
typeof(HintAssist),
49+
new FrameworkPropertyMetadata(new Point(1, -27), FrameworkPropertyMetadataOptions.Inherits));
50+
51+
public static Point GetFloatingOffset(DependencyObject element)
52+
{
53+
return (Point)element.GetValue(FloatingOffsetProperty);
54+
}
55+
56+
public static void SetFloatingOffset(DependencyObject element, Point value)
57+
{
58+
element.SetValue(FloatingOffsetProperty, value);
59+
}
60+
#endregion
61+
2762
#region Hint
2863

2964
/// <summary>

MaterialDesignThemes.Wpf/MaterialDesignThemes.Wpf.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,7 @@
254254
<Compile Include="Converters\CircularProgressBar\StartPointConverter.cs" />
255255
<Compile Include="Converters\ClockItemIsCheckedConverter.cs" />
256256
<Compile Include="Converters\ClockLineConverter.cs" />
257+
<Compile Include="Converters\DoubleRangeMultiConverter.cs" />
257258
<Compile Include="Converters\DrawerOffsetConverter.cs" />
258259
<Compile Include="Converters\EqualityToVisibilityConverter.cs" />
259260
<Compile Include="Converters\HintProxyFabricConverter.cs" />

MaterialDesignThemes.Wpf/SmartHint.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,28 @@ public bool UseFloating
7676

7777
#endregion
7878

79+
#region FloatingScale & FloatingOffset
80+
81+
public static readonly DependencyProperty FloatingScaleProperty = DependencyProperty.Register(
82+
nameof(FloatingScale), typeof(double), typeof(SmartHint), new PropertyMetadata(.74));
83+
84+
public double FloatingScale
85+
{
86+
get { return (double)GetValue(FloatingScaleProperty); }
87+
set { SetValue(FloatingScaleProperty, value); }
88+
}
89+
90+
public static readonly DependencyProperty FloatingOffsetProperty = DependencyProperty.Register(
91+
nameof(FloatingOffset), typeof(Point), typeof(SmartHint), new PropertyMetadata(new Point(1, -27)));
92+
93+
public Point FloatingOffset
94+
{
95+
get { return (Point)GetValue(FloatingOffsetProperty); }
96+
set { SetValue(FloatingOffsetProperty, value); }
97+
}
98+
99+
#endregion
100+
79101
#region HintOpacity
80102

81103
public static readonly DependencyProperty HintOpacityProperty = DependencyProperty.Register(

MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.SmartHint.xaml

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

67
<converters:BooleanToVisibilityConverter x:Key="BoolToVisConverter"/>
78
<converters:BooleanToVisibilityConverter x:Key="InverseBoolToVisConverter" TrueValue="Collapsed" FalseValue="Visible"/>
8-
9+
<converters:DoubleRangeMultiConverter x:Key="ScaleConverter"/>
10+
<converters:MathMultipleConverter x:Key="TranslateConverter" Operation="Multiply"/>
11+
<system:Double x:Key="NoContentFloatingScale">1.0</system:Double>
12+
913
<Style TargetType="{x:Type wpf:SmartHint}">
1014
<Setter Property="HorizontalAlignment" Value="Left"/>
1115
<Setter Property="VerticalAlignment" Value="Bottom"/>
@@ -31,18 +35,9 @@
3135
<DoubleAnimation Storyboard.TargetName="FloatingHintTextBlock" Storyboard.TargetProperty="Opacity"
3236
Duration="0:0:0.3" To="{TemplateBinding HintOpacity}"
3337
EasingFunction="{StaticResource AnimationEasingFunction}"/>
34-
<DoubleAnimation Storyboard.TargetName="FloatingHintTextBlock" Storyboard.TargetProperty="(Control.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.ScaleX)"
35-
Duration="0:0:0.3" To=".74"
36-
EasingFunction="{StaticResource AnimationEasingFunction}"/>
37-
<DoubleAnimation Storyboard.TargetName="FloatingHintTextBlock" Storyboard.TargetProperty="(Control.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.ScaleY)"
38-
Duration="0:0:0.3" To=".74"
39-
EasingFunction="{StaticResource AnimationEasingFunction}"/>
40-
<DoubleAnimation Storyboard.TargetName="FloatingHintTextBlock" Storyboard.TargetProperty="(Control.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.X)"
38+
<DoubleAnimation Storyboard.TargetName="FloatingHintTextBlock" Storyboard.TargetProperty="Tag"
4139
Duration="0:0:0.3" To="1"
4240
EasingFunction="{StaticResource AnimationEasingFunction}"/>
43-
<DoubleAnimation Storyboard.TargetName="FloatingHintTextBlock" Storyboard.TargetProperty="(Control.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.Y)"
44-
Duration="0:0:0.3" To="-27"
45-
EasingFunction="{StaticResource AnimationEasingFunction}"/>
4641
</Storyboard>
4742
</VisualTransition>
4843
<VisualTransition From="*" To="ContentEmpty">
@@ -53,16 +48,7 @@
5348
<DoubleAnimation Storyboard.TargetName="FloatingHintTextBlock" Storyboard.TargetProperty="Opacity"
5449
Duration="0:0:0.3"
5550
EasingFunction="{StaticResource AnimationEasingFunction}"/>
56-
<DoubleAnimation Storyboard.TargetName="FloatingHintTextBlock" Storyboard.TargetProperty="(Control.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.ScaleX)"
57-
Duration="0:0:0.3"
58-
EasingFunction="{StaticResource AnimationEasingFunction}"/>
59-
<DoubleAnimation Storyboard.TargetName="FloatingHintTextBlock" Storyboard.TargetProperty="(Control.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.ScaleY)"
60-
Duration="0:0:0.3"
61-
EasingFunction="{StaticResource AnimationEasingFunction}"/>
62-
<DoubleAnimation Storyboard.TargetName="FloatingHintTextBlock" Storyboard.TargetProperty="(Control.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.X)"
63-
Duration="0:0:0.3"
64-
EasingFunction="{StaticResource AnimationEasingFunction}"/>
65-
<DoubleAnimation Storyboard.TargetName="FloatingHintTextBlock" Storyboard.TargetProperty="(Control.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.Y)"
51+
<DoubleAnimation Storyboard.TargetName="FloatingHintTextBlock" Storyboard.TargetProperty="Tag"
6652
Duration="0:0:0.3"
6753
EasingFunction="{StaticResource AnimationEasingFunction}"/>
6854
</Storyboard>
@@ -74,14 +60,8 @@
7460
Duration="0" To="0" />
7561
<DoubleAnimation Storyboard.TargetProperty="Opacity" Storyboard.TargetName="FloatingHintTextBlock"
7662
Duration="0" To="{TemplateBinding HintOpacity}" />
77-
<DoubleAnimation Storyboard.TargetName="FloatingHintTextBlock" Storyboard.TargetProperty="(Control.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.ScaleX)"
78-
Duration="0" To=".74" />
79-
<DoubleAnimation Storyboard.TargetName="FloatingHintTextBlock" Storyboard.TargetProperty="(Control.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.ScaleY)"
80-
Duration="0" To=".74" />
81-
<DoubleAnimation Storyboard.TargetProperty="(Control.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.X)" Storyboard.TargetName="FloatingHintTextBlock"
82-
Duration="0" To="1" />
83-
<DoubleAnimation Storyboard.TargetProperty="(Control.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.Y)" Storyboard.TargetName="FloatingHintTextBlock"
84-
Duration="0" To="-27" />
63+
<DoubleAnimation Storyboard.TargetName="FloatingHintTextBlock" Storyboard.TargetProperty="Tag"
64+
Duration="0" To="1"/>
8565
</Storyboard>
8666
</VisualState>
8767
<VisualState x:Name="ContentEmpty">
@@ -90,13 +70,7 @@
9070
Duration="0" />
9171
<DoubleAnimation Storyboard.TargetProperty="Opacity" Storyboard.TargetName="FloatingHintTextBlock"
9272
Duration="0" />
93-
<DoubleAnimation Storyboard.TargetName="FloatingHintTextBlock" Storyboard.TargetProperty="(Control.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.ScaleX)"
94-
Duration="0" />
95-
<DoubleAnimation Storyboard.TargetName="FloatingHintTextBlock" Storyboard.TargetProperty="(Control.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.ScaleY)"
96-
Duration="0" />
97-
<DoubleAnimation Storyboard.TargetProperty="(Control.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.X)" Storyboard.TargetName="FloatingHintTextBlock"
98-
Duration="0" />
99-
<DoubleAnimation Storyboard.TargetProperty="(Control.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.Y)" Storyboard.TargetName="FloatingHintTextBlock"
73+
<DoubleAnimation Storyboard.TargetName="FloatingHintTextBlock" Storyboard.TargetProperty="Tag"
10074
Duration="0" />
10175
</Storyboard>
10276
</VisualState>
@@ -111,12 +85,43 @@
11185
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
11286
Opacity="{TemplateBinding HintOpacity}"
11387
IsHitTestVisible="False"
114-
IsTabStop="False"
88+
IsTabStop="False"
11589
RenderTransformOrigin="0,1">
90+
<ContentControl.Tag>
91+
<system:Double>0.0</system:Double>
92+
</ContentControl.Tag>
11693
<ContentControl.RenderTransform>
11794
<TransformGroup>
118-
<TranslateTransform X="0" Y="0"/>
119-
<ScaleTransform ScaleX="1" ScaleY="1" />
95+
<TranslateTransform>
96+
<TranslateTransform.X>
97+
<MultiBinding Converter="{StaticResource TranslateConverter}">
98+
<Binding Path="Tag" ElementName="FloatingHintTextBlock"/>
99+
<Binding Path="FloatingOffset.X" RelativeSource="{RelativeSource TemplatedParent}"/>
100+
</MultiBinding>
101+
</TranslateTransform.X>
102+
<TranslateTransform.Y>
103+
<MultiBinding Converter="{StaticResource TranslateConverter}">
104+
<Binding Path="Tag" ElementName="FloatingHintTextBlock"/>
105+
<Binding Path="FloatingOffset.Y" RelativeSource="{RelativeSource TemplatedParent}"/>
106+
</MultiBinding>
107+
</TranslateTransform.Y>
108+
</TranslateTransform>
109+
<ScaleTransform>
110+
<ScaleTransform.ScaleX>
111+
<MultiBinding Converter="{StaticResource ScaleConverter}">
112+
<Binding Path="Tag" ElementName="FloatingHintTextBlock"/>
113+
<Binding Source="{StaticResource NoContentFloatingScale}"/>
114+
<Binding Path="FloatingScale" RelativeSource="{RelativeSource TemplatedParent}"/>
115+
</MultiBinding>
116+
</ScaleTransform.ScaleX>
117+
<ScaleTransform.ScaleY>
118+
<MultiBinding Converter="{StaticResource ScaleConverter}">
119+
<Binding Path="Tag" ElementName="FloatingHintTextBlock"/>
120+
<Binding Source="{StaticResource NoContentFloatingScale}"/>
121+
<Binding Path="FloatingScale" RelativeSource="{RelativeSource TemplatedParent}"/>
122+
</MultiBinding>
123+
</ScaleTransform.ScaleY>
124+
</ScaleTransform>
120125
</TransformGroup>
121126
</ContentControl.RenderTransform>
122127
</ContentControl>

MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TextBox.xaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
FontSize="{TemplateBinding FontSize}"
8383
HintOpacity="{Binding Path=(wpf:HintAssist.HintOpacity), RelativeSource={RelativeSource TemplatedParent}}"
8484
UseFloating="{Binding Path=(wpf:HintAssist.IsFloating), RelativeSource={RelativeSource TemplatedParent}}"
85+
FloatingScale="{Binding Path=(wpf:HintAssist.FloatingScale), RelativeSource={RelativeSource TemplatedParent}}"
86+
FloatingOffset="{Binding Path=(wpf:HintAssist.FloatingOffset), RelativeSource={RelativeSource TemplatedParent}}"
8587
/>
8688
</Grid>
8789
</Border>

0 commit comments

Comments
 (0)