/
MainWindow.xaml.cs
110 lines (88 loc) · 4.07 KB
/
MainWindow.xaml.cs
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
using System.Windows;
using System.Drawing;
using DevExpress.XtraGauges.Core.Customization;
using DevExpress.XtraGauges.Core.Drawing;
using DevExpress.XtraGauges.Core.Model;
using DevExpress.XtraGauges.Core.Base;
using DevExpress.XtraReports.UI;
using System.Collections.Generic;
using Color = System.Drawing.Color;
using System.Linq;
namespace Reporting_Advanced_Gauge_Customization {
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
XtraReport1 rep = new XtraReport1();
XRGauge gauge = CreateGauge();
rep.Bands[BandKind.Detail].Controls.Add(gauge);
viewer.DocumentSource = rep;
}
static T GetOrAdd<T>(List<ISerizalizeableElement> elements) where T:
ISerizalizeableElement, new() {
var element = elements.OfType<T>().FirstOrDefault();
if (element != null) return element;
T newElement = new T();
elements.Add(newElement);
return newElement;
}
XRGauge CreateGauge() {
XRGauge gauge = new XRGauge() {
ViewType = DashboardGaugeType.Linear,
ViewStyle = DashboardGaugeStyle.Full,
SizeF = new SizeF(500, 200)
};
IDashboardGauge gaugeControl = gauge.Gauge;
var gaugeElements = gaugeControl.Elements;
LinearScale linearScale = GetOrAdd<LinearScale>(gaugeElements);
SetupLinearScale(linearScale);
LinearScaleRangeBar rangeBar = GetOrAdd<LinearScaleRangeBar>(gaugeElements);
SetupRangeBar(rangeBar);
AddMarker(gaugeControl as DashboardGauge, 50f);
return gauge;
}
static void SetupLinearScale(LinearScale linearScale) {
linearScale.BeginUpdate();
AddScaleRanges(linearScale);
linearScale.MinValue = 0;
linearScale.MaxValue = 100;
linearScale.Appearance.Brush = new SolidBrushObject(Color.Transparent);
linearScale.MinorTickmark.ShowTick = false;
linearScale.MajorTickmark.ShowTick = false;
linearScale.MajorTickmark.ShowText = false;
linearScale.EndUpdate();
}
static void SetupRangeBar(LinearScaleRangeBar rangeBar) {
rangeBar.Appearance.ContentBrush = new SolidBrushObject(Color.Transparent);
}
static void AddMarker(DashboardGauge gauge, float value) {
LinearScaleProvider linearScaleComponent1 = gauge.Scale as LinearScaleProvider;
LinearScaleMarker marker = new LinearScaleMarker("marker");
marker.ShapeType = MarkerPointerShapeType.Diamond;
marker.Shader = new StyleShader() { StyleColor1 = Color.Blue, StyleColor2 = Color.Blue };
marker.ShapeOffset = -20.0f;
marker.Value = value;
marker.LinearScale = linearScaleComponent1;
ModelRoot root = gauge.Model.Composite[PredefinedCoreNames.LinearGaugeRotationNode] as ModelRoot;
root.Composite.Add(marker);
}
static void AddScaleRanges(LinearScale scale) {
LinearScaleRange range1 = new LinearScaleRange();
range1.AppearanceRange.ContentBrush = new SolidBrushObject(Color.Green);
range1.StartValue = 0;
range1.EndValue = 20;
LinearScaleRange range2 = new LinearScaleRange();
range2.AppearanceRange.ContentBrush = new SolidBrushObject(Color.Yellow);
range2.StartValue = 20;
range2.EndValue = 40;
LinearScaleRange range3 = new LinearScaleRange();
range3.AppearanceRange.ContentBrush = new SolidBrushObject(Color.Red);
range3.StartValue = 40;
range3.EndValue = 100;
scale.Ranges.Clear();
scale.Ranges.AddRange(new IRange[] { range1, range2, range3 });
}
}
}