Skip to content

Commit 66e1b77

Browse files
authored
When an explicit FloatingOffset is set don't override it (#2370)
Fixing tests Fixing comboxbox setter
1 parent be922a3 commit 66e1b77

9 files changed

+61
-13
lines changed

MaterialDesignThemes.UITests/WPF/TextBoxes/TextBoxTests.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace MaterialDesignThemes.UITests.WPF.TextBoxes
1313
{
1414
public class TextBoxTests : TestBase
1515
{
16-
public TextBoxTests(ITestOutputHelper output)
16+
public TextBoxTests(ITestOutputHelper output)
1717
: base(output)
1818
{
1919
}
@@ -283,5 +283,27 @@ public async Task HelperText_CanSetFontColorWithAttachedStyle()
283283

284284
recorder.Success();
285285
}
286+
287+
[Fact]
288+
[Description("Issue 2362")]
289+
public async Task FloatingOffset_ValuesGetApproprietlyApplied()
290+
{
291+
await using var recorder = new TestRecorder(App);
292+
293+
var textBox = await LoadXaml<TextBox>(@"
294+
<TextBox Style=""{StaticResource MaterialDesignFloatingHintTextBox}""
295+
materialDesign:HintAssist.Hint=""Hint with offset""
296+
materialDesign:HintAssist.FloatingOffset=""1,-42""
297+
Margin=""100"" VerticalAlignment=""Center""
298+
Text=""Something"" />
299+
");
300+
var hint = await textBox.GetElement<SmartHint>("Hint");
301+
Point offset = await hint.GetFloatingOffset();
302+
303+
Assert.Equal(1, offset.X);
304+
Assert.Equal(-42, offset.Y);
305+
306+
recorder.Success();
307+
}
286308
}
287309
}

MaterialDesignThemes.Wpf/Converters/FloatingHintOffsetCalculationConverter.cs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,25 @@ namespace MaterialDesignThemes.Wpf.Converters
88
{
99
internal class FloatingHintOffsetCalculationConverter : IMultiValueConverter
1010
{
11-
public object Convert(object[] values, Type targetType, object? parameter, CultureInfo culture)
11+
public object Convert(object?[] values, Type targetType, object? parameter, CultureInfo culture)
1212
{
13-
var fontFamily = (FontFamily)values[0];
14-
double fontSize = (double)values[1];
15-
double floatingScale = (double)values[2];
13+
if (values.Length > 3 &&
14+
values[3] is Point floatingOffset &&
15+
floatingOffset != HintAssist.DefaultFloatingOffset)
16+
{
17+
return floatingOffset;
18+
}
19+
20+
var fontFamily = (FontFamily)values[0]!;
21+
double fontSize = (double)values[1]!;
22+
double floatingScale = (double)values[2]!;
1623

1724
double hintHeight = fontFamily.LineSpacing * fontSize;
1825
double floatingHintHeight = hintHeight * floatingScale;
1926

20-
double offset = (values.Length > 3 ? values[3] : null) switch
27+
double offset = (values.Length > 4 ? values[4] : null) switch
2128
{
22-
Thickness padding => floatingHintHeight / 2 + padding.Top,
29+
Thickness padding => (floatingHintHeight / 2) + padding.Top,
2330
double parentHeight => (parentHeight - hintHeight + floatingHintHeight) / 2,
2431
_ => floatingHintHeight
2532
};

MaterialDesignThemes.Wpf/Converters/PickerInnerPaddingConverter.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System;
2-
using System.Diagnostics;
32
using System.Globalization;
43
using System.Windows;
54
using System.Windows.Data;
@@ -18,15 +17,18 @@ public object Convert(object value, Type targetType, object parameter, CultureIn
1817
? new Thickness(Constants.TextBoxInnerButtonSpacing, padding.Top, padding.Right, padding.Bottom)
1918
: Binding.DoNothing;
2019

21-
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotSupportedException();
20+
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
21+
=> throw new NotSupportedException();
2222

2323
/// <summary>
2424
/// Adds the width of the inner picker button to the right of inner padding
2525
/// </summary>
2626
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
2727
{
28-
if (!(values[0] is Thickness padding))
28+
if (values[0] is not Thickness padding)
29+
{
2930
return Binding.DoNothing;
31+
}
3032

3133
switch (values.Length)
3234
{
@@ -40,13 +42,16 @@ public object Convert(object[] values, Type targetType, object parameter, Cultur
4042

4143
// calculate padding for picker-button (considering floating hint offset)
4244
case 4:
43-
var offsetResult = _offsetCalculation.Convert(new[] { values[1], values[2], values[3] }, typeof(Thickness), null, culture);
45+
var offsetResult = _offsetCalculation.Convert(new[] { values[1], values[2], values[3], null }, typeof(Thickness), null, culture);
4446
if (offsetResult is Thickness offset)
47+
{
4548
return new Thickness(
4649
padding.Left + offset.Left,
4750
padding.Top + offset.Top,
4851
padding.Right + offset.Right,
4952
padding.Bottom + offset.Bottom);
53+
}
54+
5055
break;
5156
}
5257
return Binding.DoNothing;

MaterialDesignThemes.Wpf/HintAssist.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ public static class HintAssist
77
{
88
private const double DefaultFloatingScale = 0.74;
99
private const double DefaultHintOpacity = 0.56;
10-
private static readonly Point DefaultFloatingOffset = new Point(0, -16);
10+
internal static readonly Point DefaultFloatingOffset = new(0, -16);
1111
private static readonly Brush DefaultBackground = new SolidColorBrush(Colors.Transparent);
1212
private static readonly double DefaultHelperTextFontSize = 10;
1313

MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.ComboBox.xaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -620,6 +620,7 @@
620620
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontFamily" />
621621
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontSize" />
622622
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingScale)" />
623+
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingOffset)" />
623624
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="ActualHeight" />
624625
</MultiBinding>
625626
</Setter.Value>
@@ -659,6 +660,7 @@
659660
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontFamily" />
660661
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontSize" />
661662
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingScale)" />
663+
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingOffset)" />
662664
</MultiBinding>
663665
</Setter.Value>
664666
</Setter>
@@ -668,6 +670,7 @@
668670
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontFamily" />
669671
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontSize" />
670672
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingScale)" />
673+
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingOffset)" />
671674
</MultiBinding>
672675
</Setter.Value>
673676
</Setter>
@@ -1012,7 +1015,6 @@
10121015
<Style x:Key="MaterialDesignFilledComboBox" TargetType="{x:Type ComboBox}" BasedOn="{StaticResource MaterialDesignFloatingHintComboBox}">
10131016
<Setter Property="wpf:TextFieldAssist.HasFilledTextField" Value="True" />
10141017
<Setter Property="wpf:TextFieldAssist.TextFieldCornerRadius" Value="4,4,0,0" />
1015-
<Setter Property="wpf:HintAssist.FloatingOffset" Value="0,-8" />
10161018
<Setter Property="wpf:ComboBoxAssist.ShowSelectedItem" Value="False" />
10171019
<Setter Property="VerticalContentAlignment" Value="Stretch" />
10181020
<Setter Property="VerticalAlignment" Value="Stretch" />

MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.DatePicker.xaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,7 @@
240240
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontFamily" />
241241
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontSize" />
242242
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingScale)" />
243+
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingOffset)" />
243244
</MultiBinding>
244245
</Setter.Value>
245246
</Setter>
@@ -249,6 +250,7 @@
249250
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontFamily" />
250251
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontSize" />
251252
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingScale)" />
253+
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingOffset)" />
252254
</MultiBinding>
253255
</Setter.Value>
254256
</Setter>
@@ -272,6 +274,7 @@
272274
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontFamily" />
273275
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontSize" />
274276
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingScale)" />
277+
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingOffset)" />
275278
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="ActualHeight" />
276279
</MultiBinding>
277280
</Setter.Value>

MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.PasswordBox.xaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,7 @@
209209
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontFamily" />
210210
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontSize" />
211211
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingScale)" />
212+
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingOffset)" />
212213
</MultiBinding>
213214
</Setter.Value>
214215
</Setter>
@@ -218,6 +219,7 @@
218219
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontFamily" />
219220
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontSize" />
220221
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingScale)" />
222+
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingOffset)" />
221223
</MultiBinding>
222224
</Setter.Value>
223225
</Setter>
@@ -243,6 +245,7 @@
243245
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontFamily" />
244246
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontSize" />
245247
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingScale)" />
248+
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingOffset)" />
246249
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="ActualHeight" />
247250
</MultiBinding>
248251
</Setter.Value>

MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TextBox.xaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,7 @@
286286
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontFamily" />
287287
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontSize" />
288288
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingScale)" />
289+
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingOffset)" />
289290
</MultiBinding>
290291
</Setter.Value>
291292
</Setter>
@@ -295,6 +296,7 @@
295296
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontFamily" />
296297
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontSize" />
297298
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingScale)" />
299+
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingOffset)" />
298300
</MultiBinding>
299301
</Setter.Value>
300302
</Setter>
@@ -321,6 +323,7 @@
321323
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontFamily" />
322324
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontSize" />
323325
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingScale)" />
326+
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingOffset)" />
324327
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Padding" />
325328
</MultiBinding>
326329
</Setter.Value>

MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TimePicker.xaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@
238238
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontFamily" />
239239
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontSize" />
240240
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingScale)" />
241+
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingOffset)" />
241242
</MultiBinding>
242243
</Setter.Value>
243244
</Setter>
@@ -247,6 +248,7 @@
247248
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontFamily" />
248249
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontSize" />
249250
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingScale)" />
251+
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingOffset)" />
250252
</MultiBinding>
251253
</Setter.Value>
252254
</Setter>
@@ -270,6 +272,7 @@
270272
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontFamily" />
271273
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="FontSize" />
272274
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingScale)" />
275+
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:HintAssist.FloatingOffset)" />
273276
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="ActualHeight" />
274277
</MultiBinding>
275278
</Setter.Value>

0 commit comments

Comments
 (0)