Skip to content

Commit f13c495

Browse files
[SmartHint] Add opt-in AP to control hint padding brush (#3701)
* Add AP to use for padding brush * Apply AP in SmartHint style * Forward AP and remove no longer needed trigger in TextBox style * Apply AP fix in AutoSuggestBox style * Apply AP fix in PasswordBox style * Apply AP fix in ComboBox style * Apply AP fix in DatePicker style * Apply AP fix in TimePicker style * Add showcasing of AP to demo apps * Adjust UI tests * Update src/MaterialDesignThemes.Wpf/HintAssist.cs Co-authored-by: Kevin B <[email protected]> --------- Co-authored-by: Kevin B <[email protected]>
1 parent 8d3b5ae commit f13c495

File tree

12 files changed

+80
-63
lines changed

12 files changed

+80
-63
lines changed

src/MainDemo.Wpf/Fields.xaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -671,6 +671,20 @@
671671
</smtx:XamlDisplay>
672672
</StackPanel>
673673

674+
<Rectangle Style="{StaticResource PageSectionSeparator}" />
675+
<TextBlock Style="{StaticResource PageSectionTitleTextBlock}" Text="Custom Background" />
676+
677+
<WrapPanel Margin="0,0,0,32" Background="Chocolate">
678+
<smtx:XamlDisplay Margin="16"
679+
UniqueKey="fields_custom_background_1">
680+
<TextBox Width="200"
681+
Style="{StaticResource MaterialDesignOutlinedTextBox}"
682+
materialDesign:HintAssist.Hint="Hint text"
683+
materialDesign:HintAssist.HintPaddingBrush="Chocolate" />
684+
<!-- Set HintAssist.HintPaddingBrush to match the custom background to get correct coloring of the hint padding (when floated) -->
685+
</smtx:XamlDisplay>
686+
</WrapPanel>
687+
674688
<Rectangle Style="{StaticResource PageSectionSeparator}" />
675689
<TextBlock Style="{StaticResource PageSectionTitleTextBlock}" Text="AutoSuggestBox" />
676690

src/MaterialDesign3.Demo.Wpf/Fields.xaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -518,5 +518,19 @@
518518
</smtx:XamlDisplay>
519519
</StackPanel>
520520
</Grid>
521+
522+
<TextBlock Style="{StaticResource MaterialDesignSubtitle1TextBlock}" Text="Custom Background" Margin="0,20,0,0" />
523+
524+
<WrapPanel Margin="0,0,0,32" Background="Chocolate">
525+
<smtx:XamlDisplay Margin="16"
526+
UniqueKey="fields_custom_background_1">
527+
<TextBox Width="200"
528+
Style="{StaticResource MaterialDesignOutlinedTextBox}"
529+
materialDesign:HintAssist.Hint="Hint text"
530+
materialDesign:HintAssist.HintPaddingBrush="Chocolate" />
531+
<!-- Set HintAssist.HintPaddingBrush to match the custom background to get correct coloring of the hint padding (when floated) -->
532+
</smtx:XamlDisplay>
533+
</WrapPanel>
534+
521535
</StackPanel>
522536
</UserControl>

src/MaterialDesignThemes.Wpf/HintAssist.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,17 @@ public static void SetBackground(DependencyObject element, Brush value)
119119
=> element.SetValue(BackgroundProperty, value);
120120
#endregion
121121

122+
#region AttachedProperty: HintPaddingBrush
123+
public static readonly DependencyProperty HintPaddingBrushProperty =
124+
DependencyProperty.RegisterAttached("HintPaddingBrush", typeof(Brush), typeof(HintAssist), new PropertyMetadata(null));
125+
126+
public static Brush? GetHintPaddingBrush(DependencyObject obj)
127+
=> (Brush)obj.GetValue(HintPaddingBrushProperty);
128+
129+
public static void SetHintPaddingBrush(DependencyObject obj, Brush? value)
130+
=> obj.SetValue(HintPaddingBrushProperty, value);
131+
#endregion
132+
122133
#region AttachedProperty : HelperTextProperty
123134
public static readonly DependencyProperty HelperTextProperty
124135
= DependencyProperty.RegisterAttached("HelperText", typeof(string), typeof(HintAssist),

src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.AutoSuggestBox.xaml

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -156,21 +156,22 @@
156156
VerticalScrollBarVisibility="Hidden" />
157157

158158
<wpf:SmartHint x:Name="Hint"
159-
Grid.Column="1"
160-
Grid.ColumnSpan="3"
161-
VerticalAlignment="Center"
162-
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
163-
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
164-
FloatingOffset="{TemplateBinding wpf:HintAssist.FloatingOffset}"
165-
FloatingScale="{TemplateBinding wpf:HintAssist.FloatingScale}"
166-
FontFamily="{TemplateBinding wpf:HintAssist.FontFamily}"
167-
FontSize="{TemplateBinding FontSize}"
168-
HintOpacity="{TemplateBinding wpf:HintAssist.HintOpacity}"
169-
HintProxy="{Binding RelativeSource={RelativeSource TemplatedParent}, Converter={x:Static converters:HintProxyFabricConverter.Instance}}"
170-
UseFloating="{TemplateBinding wpf:HintAssist.IsFloating}"
171-
FloatingTarget="{Binding ElementName=PART_ContentHost}"
172-
HintHost="{Binding RelativeSource={RelativeSource TemplatedParent}}"
173-
wpf:HintAssist.Background="{TemplateBinding wpf:HintAssist.Background}">
159+
Grid.Column="1"
160+
Grid.ColumnSpan="3"
161+
VerticalAlignment="Center"
162+
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
163+
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
164+
FloatingOffset="{TemplateBinding wpf:HintAssist.FloatingOffset}"
165+
FloatingScale="{TemplateBinding wpf:HintAssist.FloatingScale}"
166+
FontFamily="{TemplateBinding wpf:HintAssist.FontFamily}"
167+
FontSize="{TemplateBinding FontSize}"
168+
HintOpacity="{TemplateBinding wpf:HintAssist.HintOpacity}"
169+
HintProxy="{Binding RelativeSource={RelativeSource TemplatedParent}, Converter={x:Static converters:HintProxyFabricConverter.Instance}}"
170+
UseFloating="{TemplateBinding wpf:HintAssist.IsFloating}"
171+
FloatingTarget="{Binding ElementName=PART_ContentHost}"
172+
HintHost="{Binding RelativeSource={RelativeSource TemplatedParent}}"
173+
wpf:HintAssist.Background="{TemplateBinding wpf:HintAssist.Background}"
174+
wpf:HintAssist.HintPaddingBrush="{TemplateBinding wpf:HintAssist.HintPaddingBrush}">
174175
<wpf:SmartHint.InitialHorizontalOffset>
175176
<MultiBinding Converter="{StaticResource FloatingHintInitialHorizontalOffsetConverter}">
176177
<Binding ElementName="PrefixTextBlock" Path="ActualWidth" />
@@ -369,14 +370,6 @@
369370
<Setter TargetName="Hint" Property="FloatingMargin" Value="4,0" />
370371
<Setter TargetName="Hint" Property="InitialVerticalOffset" Value="{Binding ElementName=Hint, Path=ActualHeight, Converter={StaticResource DivisionConverter}, ConverterParameter=2}" />
371372
</Trigger>
372-
<MultiTrigger>
373-
<MultiTrigger.Conditions>
374-
<Condition Property="wpf:TextFieldAssist.HasOutlinedTextField" Value="True" />
375-
<Condition Property="wpf:HintAssist.IsFloating" Value="True" />
376-
<Condition SourceName="Hint" Property="IsHintInFloatingPosition" Value="True" />
377-
</MultiTrigger.Conditions>
378-
<Setter TargetName="Hint" Property="wpf:HintAssist.Background" Value="{DynamicResource MaterialDesign.Brush.Background}" />
379-
</MultiTrigger>
380373

381374
<!-- IsEnabled -->
382375
<MultiTrigger>

src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.ComboBox.xaml

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,7 @@
411411
FloatingTarget="{Binding ElementName=PART_EditableTextBox}"
412412
HintHost="{Binding RelativeSource={RelativeSource TemplatedParent}}"
413413
wpf:HintAssist.Background="{TemplateBinding wpf:HintAssist.Background}"
414+
wpf:HintAssist.HintPaddingBrush="{TemplateBinding wpf:HintAssist.HintPaddingBrush}"
414415
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
415416
UseLayoutRounding="{TemplateBinding UseLayoutRounding}">
416417
<wpf:SmartHint.InitialHorizontalOffset>
@@ -595,14 +596,6 @@
595596
<Setter TargetName="Hint" Property="FloatingMargin" Value="4,0" />
596597
<Setter TargetName="Hint" Property="InitialVerticalOffset" Value="{Binding ElementName=Hint, Path=ActualHeight, Converter={StaticResource DivisionConverter}, ConverterParameter=2}" />
597598
</Trigger>
598-
<MultiTrigger>
599-
<MultiTrigger.Conditions>
600-
<Condition Property="wpf:TextFieldAssist.HasOutlinedTextField" Value="True" />
601-
<Condition Property="wpf:HintAssist.IsFloating" Value="True" />
602-
<Condition SourceName="Hint" Property="IsHintInFloatingPosition" Value="True" />
603-
</MultiTrigger.Conditions>
604-
<Setter TargetName="Hint" Property="wpf:HintAssist.Background" Value="{DynamicResource MaterialDesign.Brush.Background}" />
605-
</MultiTrigger>
606599

607600
<!-- Floating hint -->
608601
<MultiTrigger>

src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.DatePicker.xaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
wpf:HintAssist.FontFamily="{TemplateBinding wpf:HintAssist.FontFamily}"
6060
wpf:HintAssist.Foreground="{TemplateBinding wpf:HintAssist.Foreground}"
6161
wpf:HintAssist.Background="{TemplateBinding wpf:HintAssist.Background}"
62+
wpf:HintAssist.HintPaddingBrush="{TemplateBinding wpf:HintAssist.HintPaddingBrush}"
6263
wpf:HintAssist.HelperTextStyle="{TemplateBinding wpf:HintAssist.HelperTextStyle}"
6364
wpf:HintAssist.Hint="{TemplateBinding wpf:HintAssist.Hint}"
6465
wpf:HintAssist.HintOpacity="{TemplateBinding wpf:HintAssist.HintOpacity}"

src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.PasswordBox.xaml

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,8 @@
212212
HintProxy="{Binding RelativeSource={RelativeSource TemplatedParent}, Converter={x:Static converters:HintProxyFabricConverter.Instance}}"
213213
UseFloating="{TemplateBinding wpf:HintAssist.IsFloating}"
214214
FloatingTarget="{Binding ElementName=PART_ContentHost}"
215-
wpf:HintAssist.Background="{TemplateBinding wpf:HintAssist.Background}">
215+
wpf:HintAssist.Background="{TemplateBinding wpf:HintAssist.Background}"
216+
wpf:HintAssist.HintPaddingBrush="{TemplateBinding wpf:HintAssist.HintPaddingBrush}">
216217
<wpf:SmartHint.InitialHorizontalOffset>
217218
<MultiBinding Converter="{StaticResource FloatingHintInitialHorizontalOffsetConverter}">
218219
<Binding ElementName="PrefixTextBlock" Path="ActualWidth" />
@@ -361,14 +362,6 @@
361362
<Setter TargetName="Hint" Property="FloatingMargin" Value="4,0" />
362363
<Setter TargetName="Hint" Property="InitialVerticalOffset" Value="{Binding ElementName=Hint, Path=ActualHeight, Converter={StaticResource DivisionConverter}, ConverterParameter=2}" />
363364
</Trigger>
364-
<MultiTrigger>
365-
<MultiTrigger.Conditions>
366-
<Condition Property="wpf:TextFieldAssist.HasOutlinedTextField" Value="True" />
367-
<Condition Property="wpf:HintAssist.IsFloating" Value="True" />
368-
<Condition SourceName="Hint" Property="IsHintInFloatingPosition" Value="True" />
369-
</MultiTrigger.Conditions>
370-
<Setter Property="wpf:HintAssist.Background" Value="{DynamicResource MaterialDesign.Brush.Background}" />
371-
</MultiTrigger>
372365

373366
<!-- IsEnabled -->
374367
<MultiTrigger>
@@ -838,7 +831,8 @@
838831
HintProxy="{Binding RelativeSource={RelativeSource TemplatedParent}, Converter={x:Static converters:HintProxyFabricConverter.Instance}}"
839832
UseFloating="{TemplateBinding wpf:HintAssist.IsFloating}"
840833
FloatingTarget="{Binding ElementName=PART_ContentHost}"
841-
wpf:HintAssist.Background="{TemplateBinding wpf:HintAssist.Background}">
834+
wpf:HintAssist.Background="{TemplateBinding wpf:HintAssist.Background}"
835+
wpf:HintAssist.HintPaddingBrush="{TemplateBinding wpf:HintAssist.HintPaddingBrush}">
842836
<wpf:SmartHint.InitialHorizontalOffset>
843837
<MultiBinding Converter="{StaticResource FloatingHintInitialHorizontalOffsetConverter}">
844838
<Binding ElementName="PrefixTextBlock" Path="ActualWidth" />
@@ -1000,14 +994,6 @@
1000994
<Setter TargetName="Hint" Property="FloatingMargin" Value="4,0" />
1001995
<Setter TargetName="Hint" Property="InitialVerticalOffset" Value="{Binding ElementName=Hint, Path=ActualHeight, Converter={StaticResource DivisionConverter}, ConverterParameter=2}" />
1002996
</Trigger>
1003-
<MultiTrigger>
1004-
<MultiTrigger.Conditions>
1005-
<Condition Property="wpf:TextFieldAssist.HasOutlinedTextField" Value="True" />
1006-
<Condition Property="wpf:HintAssist.IsFloating" Value="True" />
1007-
<Condition SourceName="Hint" Property="IsHintInFloatingPosition" Value="True" />
1008-
</MultiTrigger.Conditions>
1009-
<Setter Property="wpf:HintAssist.Background" Value="{DynamicResource MaterialDesign.Brush.Background}" />
1010-
</MultiTrigger>
1011997

1012998
<!-- IsEnabled -->
1013999
<MultiTrigger>

src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.SmartHint.xaml

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
<converters:FloatingHintContainerMarginConverter x:Key="FloatingHintContainerMarginConverter" />
1919
<converters:FloatingHintTextBlockMarginConverter x:Key="FloatingHintTextBlockMarginConverter" />
2020
<converters:FloatingHintClippingGridConverter x:Key="FloatingHintClippingGridConverter" />
21+
<converters:FirstNonNullConverter x:Key="FirstNonNullConverter" />
2122
</Style.Resources>
2223
<Setter Property="wpf:BehaviorsAssist.Behaviors">
2324
<Setter.Value>
@@ -212,7 +213,7 @@
212213
<Binding Source="{StaticResource NoContentFloatingScale}" />
213214
</MultiBinding>
214215
</ContentControl.RenderTransform>
215-
<Grid x:Name="HintBackgroundGrid" Background="{TemplateBinding wpf:HintAssist.Background}" IsHitTestVisible="False">
216+
<Grid x:Name="HintBackgroundGrid" Tag="{DynamicResource MaterialDesign.Brush.Background}" IsHitTestVisible="False">
216217
<ContentControl Content="{TemplateBinding Hint}" IsTabStop="False">
217218
<ContentControl.Margin>
218219
<MultiBinding Converter="{StaticResource FloatingHintContainerMarginConverter}">
@@ -227,6 +228,18 @@
227228
</Canvas>
228229
</Grid>
229230
</Grid>
231+
<ControlTemplate.Triggers>
232+
<Trigger Property="IsHintInFloatingPosition" Value="True">
233+
<Setter TargetName="HintBackgroundGrid" Property="Background">
234+
<Setter.Value>
235+
<MultiBinding Converter="{StaticResource FirstNonNullConverter}">
236+
<Binding Path="(wpf:HintAssist.HintPaddingBrush)" RelativeSource="{RelativeSource TemplatedParent}" />
237+
<Binding Path="Tag" ElementName="HintBackgroundGrid" />
238+
</MultiBinding>
239+
</Setter.Value>
240+
</Setter>
241+
</Trigger>
242+
</ControlTemplate.Triggers>
230243
</ControlTemplate>
231244
</Setter.Value>
232245
</Setter>

src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TextBox.xaml

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,8 @@
211211
UseFloating="{TemplateBinding wpf:HintAssist.IsFloating}"
212212
FloatingTarget="{Binding ElementName=PART_ContentHost}"
213213
HintHost="{Binding RelativeSource={RelativeSource TemplatedParent}}"
214-
wpf:HintAssist.Background="{TemplateBinding wpf:HintAssist.Background}">
214+
wpf:HintAssist.Background="{TemplateBinding wpf:HintAssist.Background}"
215+
wpf:HintAssist.HintPaddingBrush="{TemplateBinding wpf:HintAssist.HintPaddingBrush}">
215216
<wpf:SmartHint.InitialHorizontalOffset>
216217
<MultiBinding Converter="{StaticResource FloatingHintInitialHorizontalOffsetConverter}">
217218
<Binding ElementName="PrefixTextBlock" Path="ActualWidth" />
@@ -385,14 +386,6 @@
385386
<Setter TargetName="Hint" Property="FloatingMargin" Value="4,0" />
386387
<Setter TargetName="Hint" Property="InitialVerticalOffset" Value="{Binding ElementName=Hint, Path=ActualHeight, Converter={StaticResource DivisionConverter}, ConverterParameter=2}" />
387388
</Trigger>
388-
<MultiTrigger>
389-
<MultiTrigger.Conditions>
390-
<Condition Property="wpf:TextFieldAssist.HasOutlinedTextField" Value="True" />
391-
<Condition Property="wpf:HintAssist.IsFloating" Value="True" />
392-
<Condition SourceName="Hint" Property="IsHintInFloatingPosition" Value="True" />
393-
</MultiTrigger.Conditions>
394-
<Setter TargetName="Hint" Property="wpf:HintAssist.Background" Value="{DynamicResource MaterialDesign.Brush.Background}" />
395-
</MultiTrigger>
396389

397390
<!-- IsEnabled -->
398391
<MultiTrigger>

src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TimePicker.xaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
wpf:HintAssist.FontFamily="{TemplateBinding wpf:HintAssist.FontFamily}"
7373
wpf:HintAssist.Foreground="{TemplateBinding wpf:HintAssist.Foreground}"
7474
wpf:HintAssist.Background="{TemplateBinding wpf:HintAssist.Background}"
75+
wpf:HintAssist.HintPaddingBrush="{TemplateBinding wpf:HintAssist.HintPaddingBrush}"
7576
wpf:HintAssist.HelperTextStyle="{TemplateBinding wpf:HintAssist.HelperTextStyle}"
7677
wpf:HintAssist.Hint="{TemplateBinding wpf:HintAssist.Hint}"
7778
wpf:HintAssist.HintOpacity="{TemplateBinding wpf:HintAssist.HintOpacity}"

0 commit comments

Comments
 (0)