Dreamine.UI.Wpf
1.0.1
Dreamine.UI.Wpf 사용자 인터페이스 기능과 구성 요소를 제공합니다.
Toggle main menu visibility
로딩중...
검색중...
일치하는것 없음
LedPositionConverter.cs
이 파일의 문서화 페이지로 가기
1
using
System;
2
using
System.Globalization;
3
using
System.Windows.Data;
4
using
Dreamine.UI.Wpf.Controls
;
5
6
namespace
Dreamine.UI.Wpf.Converters
7
{
24
public
sealed
class
LedPositionConverter
: IMultiValueConverter
25
{
74
public
object
Convert
(
object
[] values, Type targetType,
object
parameter, CultureInfo culture)
75
{
76
string
mode = (parameter as string) ??
"OuterLeft"
;
77
if
(values ==
null
|| values.Length < 4)
return
0.0;
78
79
var corner = values[0] is
LedCorner
c ? c :
LedCorner
.TopRight;
80
double
extent =
ToDouble
(values[1]);
// width or height
81
double
diameter =
ToDouble
(values[2]);
82
double
edgeOffset =
ToDouble
(values[3]);
83
double
innerScale = (values.Length > 4) ?
ToDouble
(values[4]) : 0.45;
84
85
double
outerLeft = (corner ==
LedCorner.TopRight
|| corner ==
LedCorner
.BottomRight)
86
? extent - diameter - edgeOffset
87
: edgeOffset;
88
89
double
outerTop = (corner ==
LedCorner.BottomLeft
|| corner ==
LedCorner
.BottomRight)
90
? extent - diameter - edgeOffset
91
: edgeOffset;
92
93
if
(mode.Equals(
"OuterLeft"
, StringComparison.OrdinalIgnoreCase))
return
outerLeft;
94
if
(mode.Equals(
"OuterTop"
, StringComparison.OrdinalIgnoreCase))
return
outerTop;
95
96
double
innerDiameter = diameter *
Clamp01
(innerScale);
97
double
offset = (diameter - innerDiameter) / 2.0;
98
99
if
(mode.Equals(
"InnerLeft"
, StringComparison.OrdinalIgnoreCase))
return
outerLeft + offset;
100
if
(mode.Equals(
"InnerTop"
, StringComparison.OrdinalIgnoreCase))
return
outerTop + offset;
101
102
return
0.0;
103
}
104
161
public
object
[]
ConvertBack
(
object
value, Type[] targetTypes,
object
parameter, CultureInfo culture) =>
162
throw
new
NotSupportedException();
163
188
private
static
double
ToDouble
(
object
v)
189
{
190
if
(v is
double
d)
return
d;
191
if
(v is
float
f)
return
f;
192
if
(v is
int
i)
return
i;
193
if
(v is
string
s &&
double
.TryParse(s, out var r))
return
r;
194
return
0.0;
195
}
196
221
private
static
double
Clamp01
(
double
v) => (v < 0) ? 0 : (v > 1 ? 1 : v);
222
}
223
}
Dreamine.UI.Wpf.Controls
Definition
LedCorner.cs:1
Dreamine.UI.Wpf.Controls.LedCorner
LedCorner
Definition
LedCorner.cs:12
Dreamine.UI.Wpf.Controls.LedCorner.TopRight
@ TopRight
Definition
LedCorner.cs:30
Dreamine.UI.Wpf.Controls.LedCorner.BottomLeft
@ BottomLeft
Definition
LedCorner.cs:39
Dreamine.UI.Wpf.Converters
Definition
AddOffsetConverter.cs:10
Dreamine.UI.Wpf.Converters.LedPositionConverter
Definition
LedPositionConverter.cs:25
Dreamine.UI.Wpf.Converters.LedPositionConverter.ToDouble
static double ToDouble(object v)
Definition
LedPositionConverter.cs:188
Dreamine.UI.Wpf.Converters.LedPositionConverter.Convert
object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
Definition
LedPositionConverter.cs:74
Dreamine.UI.Wpf.Converters.LedPositionConverter.Clamp01
static double Clamp01(double v)
Definition
LedPositionConverter.cs:221
Dreamine.UI.Wpf.Converters.LedPositionConverter.ConvertBack
object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
Definition
LedPositionConverter.cs:161
Converters
LedPositionConverter.cs
다음에 의해 생성됨 :
1.17.0