Skip to content

Commit aede68a

Browse files
authored
Fix the converter to round the value (#3452)
The issue in the bug was the left margin with rounding causing the UI thread to functionally loop prevent many UI features from working properly.
1 parent c2e5446 commit aede68a

File tree

1 file changed

+28
-40
lines changed

1 file changed

+28
-40
lines changed

MaterialDesignThemes.Wpf/Converters/FloatingHintTextBlockMarginConverter.cs

Lines changed: 28 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System.Globalization;
1+
using System.Globalization;
22
using System.Windows.Data;
33
using System.Windows.Media;
44

@@ -25,89 +25,77 @@ internal class FloatingHintTextBlockMarginConverter : IMultiValueConverter
2525
HorizontalAlignment alignment = restingAlignment;
2626
if (scale != 0)
2727
{
28-
switch (floatingAlignment)
28+
alignment = floatingAlignment switch
2929
{
30-
case FloatingHintHorizontalAlignment.Inherit:
31-
alignment = restingAlignment;
32-
break;
33-
case FloatingHintHorizontalAlignment.Left:
34-
alignment = HorizontalAlignment.Left;
35-
break;
36-
case FloatingHintHorizontalAlignment.Center:
37-
alignment = HorizontalAlignment.Center;
38-
break;
39-
case FloatingHintHorizontalAlignment.Right:
40-
alignment = HorizontalAlignment.Right;
41-
break;
42-
case FloatingHintHorizontalAlignment.Stretch:
43-
alignment = HorizontalAlignment.Stretch;
44-
break;
45-
default:
46-
throw new ArgumentOutOfRangeException();
47-
}
30+
FloatingHintHorizontalAlignment.Inherit => restingAlignment,
31+
FloatingHintHorizontalAlignment.Left => HorizontalAlignment.Left,
32+
FloatingHintHorizontalAlignment.Center => HorizontalAlignment.Center,
33+
FloatingHintHorizontalAlignment.Right => HorizontalAlignment.Right,
34+
FloatingHintHorizontalAlignment.Stretch => HorizontalAlignment.Stretch,
35+
_ => throw new ArgumentOutOfRangeException(),
36+
};
4837
}
49-
switch (alignment)
38+
double leftThickness = alignment switch
5039
{
51-
case HorizontalAlignment.Right:
52-
return FloatRight();
53-
case HorizontalAlignment.Center:
54-
return FloatCenter();
55-
default:
56-
return FloatLeft();
57-
}
40+
HorizontalAlignment.Right => FloatRight(),
41+
HorizontalAlignment.Center => FloatCenter(),
42+
_ => FloatLeft(),
43+
};
44+
45+
return new Thickness(Math.Round(leftThickness), 0, 0, 0);
5846

59-
Thickness FloatLeft()
47+
double FloatLeft()
6048
{
6149
if (restingAlignment == HorizontalAlignment.Center)
6250
{
6351
// Animate from center to left
6452
double offset = Math.Max(0, (availableWidth - desiredWidth) / 2);
65-
return new Thickness(offset - offset * scale, 0, 0, 0);
53+
return offset - offset * scale;
6654
}
6755
if (restingAlignment == HorizontalAlignment.Right)
6856
{
6957
// Animate from right to left
7058
double offset = Math.Max(0, availableWidth - desiredWidth);
71-
return new Thickness(offset - offset * scale, 0, 0, 0);
59+
return offset - offset * scale;
7260
}
73-
return new Thickness(0);
61+
return 0;
7462
}
7563

76-
Thickness FloatCenter()
64+
double FloatCenter()
7765
{
7866
if (restingAlignment == HorizontalAlignment.Left || restingAlignment == HorizontalAlignment.Stretch)
7967
{
8068
// Animate from left to center
8169
double offset = Math.Max(0, (availableWidth - desiredWidth * scaleMultiplier) / 2);
82-
return new Thickness(offset * scale, 0, 0, 0);
70+
return offset * scale;
8371
}
8472
if (restingAlignment == HorizontalAlignment.Right)
8573
{
8674
// Animate from right to center
8775
double startOffset = Math.Max(0, availableWidth - desiredWidth);
8876
double endOffset = Math.Max(0, (availableWidth - desiredWidth) / 2);
8977
double endOffsetDelta = startOffset - endOffset;
90-
return new Thickness(endOffset + endOffsetDelta * (1 - scale), 0, 0, 0);
78+
return endOffset + endOffsetDelta * (1 - scale);
9179
}
92-
return new Thickness(Math.Max(0, availableWidth - desiredWidth * scaleMultiplier) / 2, 0, 0, 0);
80+
return Math.Max(0, availableWidth - desiredWidth * scaleMultiplier) / 2;
9381
}
9482

95-
Thickness FloatRight()
83+
double FloatRight()
9684
{
9785
if (restingAlignment == HorizontalAlignment.Left || restingAlignment == HorizontalAlignment.Stretch)
9886
{
9987
// Animate from left to right
10088
double offset = Math.Max(0, availableWidth - desiredWidth * scaleMultiplier);
101-
return new Thickness(offset * scale, 0, 0, 0);
89+
return offset * scale;
10290
}
10391
if (restingAlignment == HorizontalAlignment.Center)
10492
{
10593
// Animate from center to right
10694
double startOffset = Math.Max(0, (availableWidth - desiredWidth) / 2);
10795
double endOffsetDelta = Math.Max(0, availableWidth - desiredWidth * scaleMultiplier) - startOffset;
108-
return new Thickness(startOffset + endOffsetDelta * scale, 0, 0, 0);
96+
return startOffset + endOffsetDelta * scale;
10997
}
110-
return new Thickness(Math.Max(0, availableWidth - desiredWidth * scaleMultiplier), 0, 0, 0);
98+
return Math.Max(0, availableWidth - desiredWidth * scaleMultiplier);
11199
}
112100
}
113101

0 commit comments

Comments
 (0)