1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
namespace Tango.PPC.Jobs.Converters
{
public class MarginOffsetSliderConverter : IMultiValueConverter
{
private enum SliderType
{
Left = 1,
Middle = 2,
Right = 3
};
public MarginOffsetSliderConverter()
{
}
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if(values.Count() < 3 )
return new Thickness(0, 0, 0, 0);
double sliderValue = System.Convert.ToDouble(values[0]);
var slider_width = System.Convert.ToDouble(values[1]);
if(slider_width == 0)
return new Thickness(0, 0, 0, 0);
if (slider_width > 10)
slider_width -= 10;//thumb offset;
double thumbPos = Math.Round((sliderValue * slider_width)/100, 0, MidpointRounding.AwayFromZero);
SliderType type = (SliderType)Enum.Parse(typeof(SliderType), System.Convert.ToString(parameter));
var widthOfText = System.Convert.ToDouble(values[2]);
switch (type)
{
case SliderType.Left:
{
var leftOffset = Math.Max( 0, thumbPos - widthOfText / 2);
var middleoffsetLeft = System.Convert.ToDouble(values[3]);
if (middleoffsetLeft > widthOfText)
leftOffset = Math.Min(leftOffset, (middleoffsetLeft - widthOfText - 5));
return new Thickness(leftOffset, 0, 0, 0);
}
case SliderType.Middle:
{
var leftoffsetTextWidth = System.Convert.ToDouble(values[3]);
var rightoffsetTextWidth = System.Convert.ToDouble(values[4]);
var middleOffset = Math.Max(leftoffsetTextWidth + 5, thumbPos - widthOfText / 2);
var rightBorder = rightoffsetTextWidth > 0 ? (slider_width - (rightoffsetTextWidth + 12)) : slider_width - (widthOfText + 12);
middleOffset = Math.Min(middleOffset , (rightBorder - widthOfText));
return new Thickness(middleOffset, 0, 0, 0);
}
case SliderType.Right:
{
var middleoffsetBorder = System.Convert.ToDouble(values[3]);
var middleoffsetBorderWidth = System.Convert.ToDouble(values[4]);
var rightOffset = Math.Min((slider_width - widthOfText), thumbPos - widthOfText/2);
rightOffset = Math.Max(((middleoffsetBorder + middleoffsetBorderWidth) + 12), rightOffset);
return new Thickness(rightOffset, 0, 0, 0);
}
}
return new Thickness(thumbPos, 0, 0, 0);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
return null;
}
}
}
|