Skip to content

Commit f3701dc

Browse files
committed
Merge pull request #175 from 4ipalino/master
Fix SetLightDark fpr Relative Strings
2 parents 2e59a28 + 1e214eb commit f3701dc

File tree

4 files changed

+178
-3
lines changed

4 files changed

+178
-3
lines changed

MainDemo.Wpf/TextFields.xaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
<RowDefinition Height="Auto" />
5151
<RowDefinition Height="Auto" />
5252
<RowDefinition Height="Auto" />
53+
<RowDefinition Height="Auto" />
5354
</Grid.RowDefinitions>
5455
<Viewbox Grid.Row="0" Grid.Column="0">
5556
<Canvas Width="24" Height="24">
@@ -172,5 +173,14 @@
172173
<ComboBoxItem>Orange</ComboBoxItem>
173174
</ComboBox>
174175

176+
<Viewbox Grid.Row="5" Grid.Column="0">
177+
<Canvas Width="24" Height="24">
178+
<Path Data="M7,14A2,2 0 0,1 5,12A2,2 0 0,1 7,10A2,2 0 0,1 9,12A2,2 0 0,1 7,14M12.65,10C11.83,7.67 9.61,6 7,6A6,6 0 0,0 1,12A6,6 0 0,0 7,18C9.61,18 11.83,16.33 12.65,14H17V18H21V14H23V10H12.65Z"
179+
Fill="{Binding ElementName=PasswordBox, Path=BorderBrush}" />
180+
</Canvas>
181+
</Viewbox>
182+
<PasswordBox Grid.Row="5" Grid.Column="1"
183+
x:Name="FloatingPasswordBox"
184+
materialDesign:TextFieldAssist.Hint="Floating Password" Style="{StaticResource MaterialDesignFloatingHintPasswordBox}" />
175185
</Grid>
176186
</UserControl>

MaterialDesignThemes.Wpf/PaletteHelper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public virtual void SetLightDark(bool isDark)
2727

2828
var existingMahAppsResourceDictionary = Application.Current.Resources.MergedDictionaries
2929
.Where(rd => rd.Source != null)
30-
.SingleOrDefault(rd => Regex.Match(rd.Source.AbsolutePath, @"(\/MahApps.Metro;component\/Styles\/Accents\/)((BaseLight)|(BaseDark))").Success);
30+
.SingleOrDefault(rd => Regex.Match(rd.Source.OriginalString, @"(\/MahApps.Metro;component\/Styles\/Accents\/)((BaseLight)|(BaseDark))").Success);
3131
if (existingMahAppsResourceDictionary == null) return;
3232

3333
source =

MaterialDesignThemes.Wpf/PasswordFieldAssist.cs

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ namespace MaterialDesignThemes.Wpf
55
{
66
public static class PasswordFieldAssist
77
{
8+
private static readonly DependencyPropertyKey IsNullOrEmptyPropertyKey = DependencyProperty.RegisterAttachedReadOnly("IsNullOrEmpty", typeof(bool), typeof(PasswordFieldAssist), new PropertyMetadata(true));
9+
private static readonly DependencyProperty IsNullOrEmptyProperty = IsNullOrEmptyPropertyKey.DependencyProperty;
10+
811
public static readonly DependencyProperty ManagedProperty = DependencyProperty.RegisterAttached(
912
"Managed", typeof(PasswordBox), typeof(PasswordFieldAssist), new PropertyMetadata(default(PasswordBox), ManagedPropertyChangedCallback));
1013

@@ -26,7 +29,26 @@ private static void ManagedPropertyChangedCallback(DependencyObject dependencyOb
2629

2730
private static void PasswordBoxOnPasswordChanged(object sender, RoutedEventArgs routedEventArgs)
2831
{
29-
ConfigureHint((PasswordBox)sender);
32+
var passwordBox = (PasswordBox)sender;
33+
ConfigureHint(passwordBox);
34+
35+
var frameworkElement = (FrameworkElement)sender;
36+
if (frameworkElement == null)
37+
return;
38+
39+
var state = string.IsNullOrEmpty((passwordBox.Password ?? ""))
40+
? "MaterialDesignStateTextEmpty"
41+
: "MaterialDesignStateTextNotEmpty";
42+
43+
if (frameworkElement.IsLoaded)
44+
{
45+
VisualStateManager.GoToState(frameworkElement, state, true);
46+
}
47+
else
48+
{
49+
frameworkElement.Loaded += (s, args) => VisualStateManager.GoToState(frameworkElement, state, false);
50+
}
51+
SetIsNullOrEmpty(frameworkElement, string.IsNullOrEmpty((passwordBox.Password ?? "")));
3052
}
3153

3254
private static void ConfigureHint(PasswordBox passwordBox)
@@ -56,11 +78,21 @@ public static PasswordBox GetManaged(DependencyObject element)
5678
{
5779
return (PasswordBox)element.GetValue(ManagedProperty);
5880
}
81+
82+
private static void SetIsNullOrEmpty(DependencyObject element, bool value)
83+
{
84+
element.SetValue(IsNullOrEmptyPropertyKey, value);
85+
}
86+
87+
public static bool GetIsNullOrEmpty(DependencyObject element)
88+
{
89+
return (bool)element.GetValue(IsNullOrEmptyProperty);
90+
}
5991
}
6092

6193
public static class ProgressBarAssist
6294
{
6395

64-
96+
6597
}
6698
}

MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.PasswordBox.xaml

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,137 @@
7777
</Style.Triggers>
7878
</Style>
7979

80+
<Style x:Key="MaterialDesignFloatingHintPasswordBox" TargetType="{x:Type PasswordBox}" BasedOn="{StaticResource MaterialDesignPasswordBox}">
81+
<Setter Property="Template">
82+
<Setter.Value>
83+
<ControlTemplate TargetType="PasswordBox">
84+
<Grid>
85+
<VisualStateManager.VisualStateGroups>
86+
<VisualStateGroup x:Name="MaterialDesignStates">
87+
<VisualStateGroup.Transitions>
88+
<VisualTransition From="*" To="MaterialDesignStateTextNotEmpty">
89+
<Storyboard>
90+
<DoubleAnimation Storyboard.TargetProperty="FontSize" Storyboard.TargetName="Hint"
91+
Duration="0:0:0.3" To="10">
92+
<DoubleAnimation.EasingFunction>
93+
<SineEase EasingMode="EaseOut" />
94+
</DoubleAnimation.EasingFunction>
95+
</DoubleAnimation>
96+
<DoubleAnimation Storyboard.TargetProperty="Opacity" Storyboard.TargetName="Hint"
97+
Duration="0:0:0.3" To="1">
98+
<DoubleAnimation.EasingFunction>
99+
<SineEase EasingMode="EaseOut" />
100+
</DoubleAnimation.EasingFunction>
101+
</DoubleAnimation>
102+
<ThicknessAnimation Storyboard.TargetProperty="(FrameworkElement.Margin)" Storyboard.TargetName="Hint"
103+
Duration="0:0:0.3" To="1,-16,1,0">
104+
<ThicknessAnimation.EasingFunction>
105+
<SineEase EasingMode="EaseOut" />
106+
</ThicknessAnimation.EasingFunction>
107+
</ThicknessAnimation>
108+
</Storyboard>
109+
</VisualTransition>
110+
<VisualTransition From="*" To="MaterialDesignStateTextEmpty">
111+
<Storyboard>
112+
<DoubleAnimation Storyboard.TargetProperty="FontSize" Storyboard.TargetName="Hint"
113+
Duration="0:0:0.3">
114+
<DoubleAnimation.EasingFunction>
115+
<SineEase EasingMode="EaseOut" />
116+
</DoubleAnimation.EasingFunction>
117+
</DoubleAnimation>
118+
<DoubleAnimation Storyboard.TargetProperty="Opacity" Storyboard.TargetName="Hint"
119+
Duration="0:0:0.3">
120+
<DoubleAnimation.EasingFunction>
121+
<SineEase EasingMode="EaseOut" />
122+
</DoubleAnimation.EasingFunction>
123+
</DoubleAnimation>
124+
<ThicknessAnimation Storyboard.TargetProperty="(FrameworkElement.Margin)" Storyboard.TargetName="Hint"
125+
Duration="0:0:0.3">
126+
<ThicknessAnimation.EasingFunction>
127+
<SineEase EasingMode="EaseOut" />
128+
</ThicknessAnimation.EasingFunction>
129+
</ThicknessAnimation>
130+
</Storyboard>
131+
</VisualTransition>
132+
</VisualStateGroup.Transitions>
133+
<VisualState x:Name="MaterialDesignStateTextNotEmpty">
134+
<Storyboard>
135+
<DoubleAnimation Storyboard.TargetProperty="FontSize" Storyboard.TargetName="Hint"
136+
Duration="0" To="10" />
137+
<DoubleAnimation Storyboard.TargetProperty="Opacity" Storyboard.TargetName="Hint"
138+
Duration="0" To="1" />
139+
<ThicknessAnimation Storyboard.TargetProperty="(FrameworkElement.Margin)" Storyboard.TargetName="Hint"
140+
Duration="0" To="1,-16,1,0" />
141+
</Storyboard>
142+
</VisualState>
143+
<VisualState x:Name="MaterialDesignStateTextEmpty">
144+
<Storyboard>
145+
<DoubleAnimation Storyboard.TargetProperty="FontSize" Storyboard.TargetName="Hint"
146+
Duration="0" />
147+
<DoubleAnimation Storyboard.TargetProperty="Opacity" Storyboard.TargetName="Hint"
148+
Duration="0" />
149+
<ThicknessAnimation Storyboard.TargetProperty="(FrameworkElement.Margin)" Storyboard.TargetName="Hint"
150+
Duration="0" />
151+
</Storyboard>
152+
</VisualState>
153+
</VisualStateGroup>
154+
</VisualStateManager.VisualStateGroups>
155+
<Border x:Name="border"
156+
BorderBrush="{TemplateBinding BorderBrush}"
157+
BorderThickness="{TemplateBinding BorderThickness}"
158+
Background="{TemplateBinding Background}"
159+
SnapsToDevicePixels="True"
160+
Padding="0 4 0 4">
161+
<Grid Margin="0 12 0 0"
162+
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
163+
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}">
164+
<ScrollViewer x:Name="PART_ContentHost" Focusable="false"
165+
HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"
166+
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
167+
UseLayoutRounding="{TemplateBinding UseLayoutRounding}"
168+
/>
169+
<TextBlock Text="{Binding Path=(wpf:TextFieldAssist.Hint), RelativeSource={RelativeSource TemplatedParent}}"
170+
IsHitTestVisible="False"
171+
FontSize="{TemplateBinding FontSize}"
172+
HorizontalAlignment="Left"
173+
VerticalAlignment="Top"
174+
x:Name="Hint"
175+
Margin="1 0 1 0"
176+
Opacity="{Binding Path=(wpf:TextFieldAssist.HintOpacity), RelativeSource={RelativeSource TemplatedParent}}"
177+
/>
178+
</Grid>
179+
</Border>
180+
<wpf:Underline x:Name="Underline"/>
181+
</Grid>
182+
<ControlTemplate.Triggers>
183+
<MultiTrigger>
184+
<MultiTrigger.Conditions>
185+
<Condition Property="wpf:PasswordFieldAssist.IsNullOrEmpty" Value="False" />
186+
<Condition Property="IsKeyboardFocused" Value="True" />
187+
</MultiTrigger.Conditions>
188+
<Setter TargetName="Hint" Property="Foreground" Value="{DynamicResource PrimaryHueMidBrush}" />
189+
</MultiTrigger>
190+
191+
<Trigger Property="IsEnabled" Value="false">
192+
<Setter Property="Opacity" TargetName="border" Value="0.56"/>
193+
</Trigger>
194+
195+
<Trigger Property="IsMouseOver" Value="true">
196+
<Setter Property="BorderBrush" Value="{DynamicResource PrimaryHueMidBrush}"/>
197+
</Trigger>
198+
199+
<Trigger Property="IsKeyboardFocused" Value="true">
200+
<Setter TargetName="Underline" Property="IsActive" Value="True"/>
201+
</Trigger>
202+
203+
<Trigger Property="Validation.HasError" Value="true">
204+
<Setter Property="BorderBrush" Value="{DynamicResource ValidationErrorBrush}"/>
205+
<Setter TargetName="Underline" Property="Background" Value="{DynamicResource ValidationErrorBrush}"/>
206+
</Trigger>
207+
</ControlTemplate.Triggers>
208+
</ControlTemplate>
209+
</Setter.Value>
210+
</Setter>
211+
</Style>
212+
80213
</ResourceDictionary>

0 commit comments

Comments
 (0)