-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSignalViewerAndControlUxPolicy.cs
More file actions
79 lines (69 loc) · 2.91 KB
/
Copy pathSignalViewerAndControlUxPolicy.cs
File metadata and controls
79 lines (69 loc) · 2.91 KB
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
using System.Runtime.CompilerServices;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Threading;
namespace ArIED61850Tester;
/// <summary>
/// Presentation-only sizing policy for the two signal viewers. Navigation, IED-card actions,
/// relay icon geometry, and command buttons are defined directly in XAML so their rendered
/// appearance cannot depend on Loaded-event timing or visual-tree traversal.
/// </summary>
internal static class SignalViewerAndControlUxPolicy
{
[ModuleInitializer]
internal static void Initialize()
{
EventManager.RegisterClassHandler(
typeof(DataGrid),
FrameworkElement.LoadedEvent,
new RoutedEventHandler(OnDataGridLoaded));
}
private static void OnDataGridLoaded(object sender, RoutedEventArgs args)
{
if (sender is not DataGrid grid)
return;
var bindingPath = grid.GetBindingExpression(ItemsControl.ItemsSourceProperty)?.ParentBinding.Path?.Path;
if (!string.Equals(bindingPath, "SelectedDevice.Points", StringComparison.Ordinal) &&
!string.Equals(bindingPath, "GlobalPoints", StringComparison.Ordinal))
{
return;
}
grid.Dispatcher.BeginInvoke(
DispatcherPriority.Loaded,
new Action(() => ApplySignalViewerLayout(grid, bindingPath)));
}
private static void ApplySignalViewerLayout(DataGrid grid, string bindingPath)
{
ScrollViewer.SetHorizontalScrollBarVisibility(grid, ScrollBarVisibility.Disabled);
ScrollViewer.SetVerticalScrollBarVisibility(grid, ScrollBarVisibility.Auto);
grid.CanUserResizeColumns = false;
grid.ClipToBounds = true;
if (string.Equals(bindingPath, "SelectedDevice.Points", StringComparison.Ordinal))
{
SetColumn(grid, "Signal", 1.05, 120);
SetColumn(grid, "IEC Telegram", 1.55, 180);
SetColumn(grid, "Value", 0.72, 90);
SetColumn(grid, "Quality", 0.62, 82);
SetColumn(grid, "IED Timestamp", 1.05, 135);
SetColumn(grid, "Acquisition", 1.00, 130);
return;
}
SetColumn(grid, "IED", 0.62, 90);
SetColumn(grid, "Signal", 1.05, 145);
SetColumn(grid, "IEC Telegram", 1.72, 220);
SetColumn(grid, "Value", 0.68, 86);
SetColumn(grid, "Quality", 0.72, 88);
SetColumn(grid, "IED Timestamp", 1.02, 140);
SetColumn(grid, "Acquisition", 1.00, 135);
}
private static void SetColumn(DataGrid grid, string header, double star, double minimum)
{
var column = grid.Columns.FirstOrDefault(candidate =>
string.Equals(candidate.Header?.ToString(), header, StringComparison.Ordinal));
if (column is null)
return;
column.MinWidth = minimum;
column.Width = new DataGridLength(star, DataGridLengthUnitType.Star);
column.CanUserResize = false;
}
}