Skip to content

Commit 24af666

Browse files
committed
fix: fixed #1050
1 parent 287e598 commit 24af666

File tree

2 files changed

+39
-26
lines changed

2 files changed

+39
-26
lines changed

src/Shared/HandyControl_Shared/Controls/Slider/RangeSlider/RangeSlider.cs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -271,16 +271,11 @@ private void MoveToNextTick(double direction, bool isStart, bool isCenter = fals
271271
var newValue = _track.ValueFromPoint(pt);
272272
if (ValidateHelper.IsInRangeOfDouble(newValue))
273273
{
274-
var dir = (ValueStart + ValueEnd) / 2 > newValue;
275-
if (!dir)
274+
isStart = (ValueStart + ValueEnd) / 2 > newValue;
275+
if (!isStart)
276276
{
277-
isStart = false;
278277
direction = -Math.Abs(direction);
279278
}
280-
else
281-
{
282-
isStart = true;
283-
}
284279
}
285280
}
286281

src/Shared/HandyControl_Shared/Controls/Slider/RangeSlider/RangeTrack.cs

Lines changed: 37 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ public class RangeTrack : FrameworkElement
2626

2727
private double Density { get; set; } = double.NaN;
2828

29-
private double ThumbStartCenterOffset { get; set; } = double.NaN;
30-
3129
public RepeatButton DecreaseRepeatButton
3230
{
3331
get => _decreaseButton;
@@ -257,13 +255,12 @@ protected override Size ArrangeOverride(Size arrangeSize)
257255
: increaseButtonLength + thumbStartLength + centerButtonLength;
258256
pieceSize.Height = thumbStartLength;
259257

260-
ThumbStart?.Arrange(new Rect(offset, pieceSize));
261-
ThumbStartCenterOffset = offset.Y + thumbStartLength * 0.5;
258+
ArrangeThumb(isDirectionReversed, false, offset, pieceSize);
262259

263260
offset.Y = isDirectionReversed ? decreaseButtonLength : increaseButtonLength;
264261
pieceSize.Height = thumbEndLength;
265262

266-
ThumbEnd?.Arrange(new Rect(offset, pieceSize));
263+
ArrangeThumb(isDirectionReversed, true, offset, pieceSize);
267264
}
268265
else
269266
{
@@ -291,20 +288,45 @@ protected override Size ArrangeOverride(Size arrangeSize)
291288
offset.X = isDirectionReversed ? increaseButtonLength : decreaseButtonLength;
292289
pieceSize.Width = thumbStartLength;
293290

294-
ThumbStart?.Arrange(new Rect(offset, pieceSize));
295-
ThumbStartCenterOffset = offset.X + thumbStartLength * 0.5;
291+
ArrangeThumb(isDirectionReversed, false, offset, pieceSize);
296292

297293
offset.X = isDirectionReversed
298294
? increaseButtonLength + thumbStartLength + centerButtonLength
299295
: decreaseButtonLength + thumbEndLength + centerButtonLength;
300296
pieceSize.Width = thumbEndLength;
301297

302-
ThumbEnd?.Arrange(new Rect(offset, pieceSize));
298+
ArrangeThumb(isDirectionReversed, true, offset, pieceSize);
303299
}
304300

305301
return arrangeSize;
306302
}
307303

304+
private void ArrangeThumb(bool isDirectionReversed, bool isStart, Point offset, Size pieceSize)
305+
{
306+
if (isStart)
307+
{
308+
if (isDirectionReversed)
309+
{
310+
ThumbStart?.Arrange(new Rect(offset, pieceSize));
311+
}
312+
else
313+
{
314+
ThumbEnd?.Arrange(new Rect(offset, pieceSize));
315+
}
316+
}
317+
else
318+
{
319+
if (isDirectionReversed)
320+
{
321+
ThumbEnd?.Arrange(new Rect(offset, pieceSize));
322+
}
323+
else
324+
{
325+
ThumbStart?.Arrange(new Rect(offset, pieceSize));
326+
}
327+
}
328+
}
329+
308330
private void ComputeLengths(Size arrangeSize, bool isVertical, out double decreaseButtonLength,
309331
out double centerButtonLength, out double increaseButtonLength, out double thumbStartLength,
310332
out double thumbEndLength)
@@ -372,17 +394,13 @@ private static void OnIsEnabledChanged(DependencyObject d, DependencyPropertyCha
372394

373395
public virtual double ValueFromPoint(Point pt)
374396
{
375-
double val;
376-
// Find distance from center of thumb to given point.
377-
if (Orientation == Orientation.Horizontal)
378-
{
379-
val = ValueStart + ValueFromDistance(pt.X - ThumbStartCenterOffset, pt.Y - RenderSize.Height * 0.5);
380-
}
381-
else
382-
{
383-
val = ValueStart + ValueFromDistance(pt.X - RenderSize.Width * 0.5, pt.Y - ThumbStartCenterOffset);
384-
}
385-
return Math.Max(Minimum, Math.Min(Maximum, val));
397+
return Orientation == Orientation.Horizontal
398+
? !IsDirectionReversed
399+
? pt.X / RenderSize.Width * Maximum
400+
: (1 - pt.X / RenderSize.Width) * Maximum
401+
: !IsDirectionReversed
402+
? pt.Y / RenderSize.Height * Maximum
403+
: (1 - pt.X / RenderSize.Height) * Maximum;
386404
}
387405

388406
public virtual double ValueFromDistance(double horizontal, double vertical)

0 commit comments

Comments
 (0)